如何从DTD或XSD生成示例XML文档?

我们正在开发一个涉及大量XML转换的应用程序。我们没有任何适当的输入测试数据本身,只有DTD或XSD文件。我们想从这些文件中自己生成测试数据。有没有简单/免费的方法来做到这一点?

编辑

显然没有这方面的免费工具,我同意OxygenXML是这方面的最佳工具之一。

263951 次浏览

XMLSpy为您完成了这一任务,尽管这不是免费的……

我相信Liquid XML Studio可以免费为您完成这项工作,但我个人还没有使用它来创建测试数据。

我认为氧气(http://www.oxygenxml.com/)也可以,但那是另一种商业产品。这是一个很好的,虽然.。我强烈建议任何从事大量XML工作的人使用它。它也有一个很好的Eclipse插件。

我相信有一个免费的,功能齐全的30天试用版。

在Visual Studio 2008 SP1和更高版本中,XML架构资源管理器可以创建包含一些基本示例数据的XML文档:

  1. 打开XSD文档
  2. 切换到XML架构资源管理器
  3. 右键单击根节点并选择“生成示例XML ”

Screenshot of the XML Schema Explorer

SourceForge.net上提供的CAMProcessor将为任何XSD生成XML测试用例。有一个教程可以向您展示如何生成自己的测试示例-包括使用内容提示来确保真实的示例,而不仅仅是随机的垃圾示例。

该教程可从以下网址获得: http://www.oasis-open.org/committees/download.php/29661/XSD%20and%20jCAM%20tutorial.pdf

有关该工具的更多信息-它使用OASIS内容组装机制(CAM)标准将您的XSD重构为更加XSLT友好的结构-可以在资源网站上找到-http://www.jcam.org.uk

享受吧,DW

您可以使用XML实例生成器,它是Sun/Oracle多模式验证器的一部分。

它是README.TXT声明:

Sun XML Generator是一个Java工具,用于生成各种XML实例 几种图式。它支持DTD、RELAX命名空间、RELAX核心 TREX和W3C XML模式第1部分的子集。

这是一个命令行工具,可以生成有效的和无效的 架构中的实例。它可用于为XML生成测试用例。 需要符合特定架构的应用程序。

MSV下载页面下载并解压缩xmlgen.zip,然后运行以下命令以获取详细的用法说明:

java -jar xmlgen.jar -help

该工具似乎是在BSD许可下发布的。源代码可从“_ABC ”_0中访问

Microsoft发布了“文档生成器”工具作为示例。这是一篇文章,其中详细介绍了示例应用程序的体系结构和操作。

如果只想运行示例生成工具,请点击这里并安装MSI.

它是免费的。源可用。需要运行.NET Framework.仅适用于XSD.(不放松NG或DTD)。

Microsoft Office具有“InfoPath ”,它将XSD作为输入,并允许您快速轻松地定义用于创建XML文件的基于表单的编辑器。它有两种模式-一种是定义表单,另一种是通过填写表单来创建XML文件。我相信它最初是随Office 2003一起提供的,但大多数人从未安装过它。我非常喜欢它,这让我很震惊。

在最新版本的免费开源日蚀 IDE中,您可以从DTD和XSD文件生成XML文档。右键单击给定的*.DTD或*.XSD文件,然后选择“生成->XML文件..”。您可以选择要生成哪个根元素,以及是否应该生成可选的属性和元素。

当然,您也可以使用Eclipse来创建和编辑DTD和XSD模式文件。你不需要安装任何插件。它包含在标准分配中。

XMLBlueprint 7.5可以执行以下操作: -从DTD生成示例XML -从RELAX NG模式生成示例XML -从XML架构

生成示例XML

Liquid XML Studio有一个XML示例生成器向导,该向导将从XML架构构建示例XML文件。结果数据似乎符合模式(它只是不能为正则表达式模式生成数据)。

Generate an XML Sample from an XSD

Soapui的开源版本可以从WSDL(包含XSD类型定义)生成SOAP请求,因此看起来此功能有一个开源实现。不幸的是,我还没有弄清楚哪个图书馆习惯于这样做。

XML-XIG:XML实例生成器

http://xml-xig.sourceforge.net/.

这个开源软件会很有帮助。

到目前为止,似乎没有人能够回答这个问题:)

我使用EclipseLink的Moxy来动态生成绑定类,然后递归地遍历绑定类型。它有些繁重,但一旦实例化了对象树,它就允许XPath值注入:

InputStream in = new FileInputStream(PATH_TO_XSD);
DynamicJAXBContext jaxbContext =
DynamicJAXBContextFactory.createContextFromXSD(in, null, Thread.currentThread().getContextClassLoader(), null);
DynamicType rootType = jaxbContext.getDynamicType(YOUR_ROOT_TYPE);
DynamicEntity root = rootType.newDynamicEntity();
traverseProps(jaxbContext, root, rootType, 0);

TraverseProps是一个非常简单的递归方法:

private void traverseProps(DynamicJAXBContext c, DynamicEntity e, DynamicType t, int level) throws DynamicException, InstantiationException, IllegalAccessException{
if (t!=null) {
logger.info(indent(level) + "type [" + t.getName() + "] of class [" + t.getClassName() + "] has " + t.getNumberOfProperties() + " props");
for (String pName:t.getPropertiesNames()){
Class<?> clazz = t.getPropertyType(pName);
logger.info(indent(level) + "prop [" + pName + "] in type: " + clazz);
//logger.info("prop [" + pName + "] in entity: " + e.get(pName));


if (clazz==null){
// need to create an instance of object
String updatedClassName = pName.substring(0, 1).toUpperCase() + pName.substring(1);
logger.info(indent(level) + "Creating new type instance for " + pName + " using following class name: " + updatedClassName );
DynamicType child = c.getDynamicType("generated." + updatedClassName);
DynamicEntity childEntity = child.newDynamicEntity();
e.set(pName, childEntity);
traverseProps(c, childEntity, child, level+1);
} else {
// just set empty value
e.set(pName, clazz.newInstance());
}
}
} else {
logger.warn("type is null");
}
}

将所有内容转换为XML非常简单:

Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(root, System.out);

OpenXSD库提到,它们支持基于XSD生成XML实例。看看那个。

为完整起见,我将添加http://code.google.com/p/jlibs/wiki/XSInstance,它在一个类似(但特定于Java)的问题中提到:任何Java API从XSD生成示例XML.

你也可以http://www.wmhelp.com使用这里的XMLPad(免费使用)。 以生成XML示例。 从菜单:XSD->生成示例XML文件。

对于IntelliJ IDEA用户:

查看工具->XML操作

enter image description here

似乎工作得很好(据我测试)。

编辑:

正如@NAXA所提到的,您现在还可以右键单击XSD文件,然后单击“从XSD架构生成XML文档..”。

XMLBlueprint也可以做到这一点;这里的说明

http://www.xmlblueprint.com/help/html/topic_170.htm.

它不是免费的,但有10天的免费试用期。它看起来又快又有效率。不幸的是,它只有Windows.

还有http://xsd2xml.com/,它是一个在线XSD到XML的生成器