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

How to generate sample XML documents from their DTD or XSD?

提问人:lindelof 提问时间:8/20/2008 最后编辑:lindelof 更新时间:9/11/2019 访问量:272547

问:

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

编辑

显然没有免费的工具,我同意 OxygenXML 是最好的工具之一。

xml xsd dtd 测试数据

评论

8赞 mjn 5/2/2013
我没有看到这个问题的答案,这些问题不符合问答格式,或征求debate, arguments, polling, or extended discussion

答:

10赞 SCdF 8/20/2008 #1

XMLSpy 为您做到了这一点,尽管这不是免费的......

我相信 Liquid Xml Studio 为您做到了,并且是免费的,但我个人并没有使用它来创建测试数据。

评论

0赞 Dr. Hans-Peter Störr 12/23/2008
它生成了一些东西,但你对它没有太多的控制权:你可以选择顶级元素和一些常规选项,但你不能使用 XMLSpy 生成具有许多变体等的测试用例集。
0赞 Tim Abell 7/7/2016
XMLSpy 看起来不错,但生成的 xml 随后无法针对用于生成它的 xsd 进行验证。失败。它还在田野上吠叫 - 而不是postiveinteger*ERROR*
31赞 levand 8/26/2008 #2

我认为 Oxygen (http://www.oxygenxml.com/) 也做到了这一点,但这是另一种商业产品。不过,这是一个很好的......我强烈推荐给任何做大量XML工作的人。它也带有一个不错的 Eclipse 插件。

我确实相信有一个免费的、功能齐全的 30 天试用期。

评论

0赞 Rachel 10/22/2009
我有一堆 XSD,它们反过来又从不同的 XSD 继承了模式,我需要从这个 XSD 生成一个用于测试目的的 XML 文件,我正在使用 oxygenXML 来执行此操作,但是当我尝试这样做时,它对我不起作用,它说请定义根节点,但它不允许我这样做。因此,如果有人使用过oxygenXML,请建议可以解决这个问题?
0赞 Eric H 8/12/2011
谢谢leveland。这也回答了我的问题!如果你想来回答我的问题:stackoverflow.com/questions/7041388/......,我非常乐意把你的问题标记为答案。
0赞 sshaw 2/6/2022
为此,我尝试了很多选择,发现氧气是最好的。它是商业性的,但确实提供免费试用。我用它来从有史以来最臃肿的模式生成 XML:DDEX ERN,它运行良好。其他人做不到。
185赞 Sam Warwick 9/3/2008 #3

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

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

Screenshot of the XML Schema Explorer

评论

15赞 balint 7/19/2009
是的,这是最简单的方法。打开 XSD,切换到 XML 架构资源管理器,选择根节点,右键单击并选择“生成示例 Xml”。
3赞 Simon 2/1/2013
我在 VS2008 中使用了它,但在 VS2010 中找不到它。谁能确认这仍然存在?
0赞 Martijn 2/8/2013
和 Simon 一样:我在 VS2010 中也找不到这个。根据 MSDN 的说法,它应该仍然存在,但它不会出现在 UI 中的任何地方...... :-(
6赞 Miguel Sevilla 4/9/2013
@Simon:只有在架构资源管理器中右键单击其中一个元素时,才会获得“生成示例 XML”。元素通过绿色的左/右尖括号以图形方式表示:“<>”。您可能正在右键单击一个类型,并且生成消息只会为元素生成它(这是有道理的)。
1赞 Davos 4/28/2017
@TimAbell ,如果是,则示例 xml 文件只能包含该选项之一。msdn.microsoft.com/en-us/library/ms256109(v=vs.110).aspxxsd:choice
12赞 David Webber 11/10/2008 #4

Sourceforge.net 上可用的凸轮处理器将为任何 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

评论

3赞 11/10/2008
Sourceforge.net 下载的直接链接是:sourceforge.net/projects/camprocessor
0赞 Ghoti 3/30/2017
@Pyderman - 这是您的设置 - 查找如何更改它们。
10赞 falko 12/17/2008 #5

您可以使用 XML 实例生成器,它是 Sun/Oracle Multi-Schema Validator 的一部分。

它的自述文件.txt 状态:

Sun XML Generator 是一个 Java 工具,用于从 几种架构。它支持 DTD、RELAX 命名空间、RELAX 核心、 TREX 和 W3C XML 架构的子集第 1 部分。[...]

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

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

java -jar xmlgen.jar -help

该工具似乎是在 BSD 许可下发布的;源代码可从此处访问

评论

0赞 lindelof 1/15/2009
很好!不过有点局限。我在导入其他 XSD 的 XSD 上尝试过,但失败了。但是在 DTD 上,它运行良好。谢谢!
1赞 Jarekczek 9/7/2012
当前链接: 主页下载. 仅在目录中。我确认无法从我的 xsd 生成样本。xmlgen.zipnigthly
0赞 Nate Anderson 3/23/2016
就我而言,需要使用该文件来包含可用于生成新示例文件的令牌。制作样品需要样品!难。。。--example
0赞 RedGrittyBrick 10/17/2017
java.net 链接基本上都死了。
5赞 Kobus 4/8/2009 #6

Microsoft 发布了一个“文档生成器”工具作为示例。本文详细介绍了示例应用的体系结构和操作。

如果您只想运行示例生成工具,请单击此处并安装 MSI。

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

评论

0赞 Sam Warwick 5/21/2009
上面的链接是MSDN上一篇名为“从XML架构生成XML文档”的文章
0赞 Sean Kearon 2/16/2011
安装程序会将一堆 C# 代码拖放到您的计算机上。只需将它们转储到 LinqPad 中,您就拥有了免费的 XML 实例生成器。哒!
0赞 Mikanikal 9/26/2018
9 年后,这仍然适用于 XSD。
4赞 Kieveli 5/21/2009 #7

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

131赞 Florian Fankhauser 7/17/2009 #8

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

当然,您也可以使用 Eclipse 来创建和编辑 DTD 和 XSD 模式文件。而且您无需安装任何插件。它包含在标准发行版中。

评论

0赞 Akku 1/26/2011
谢谢!Eclipse 是免费的,这是一个完美的解决方案。
0赞 otto.poellath 3/11/2011
你们碰巧知道什么 Eclipse 功能提供了这个功能吗?我的“生成”子菜单将“JAXB 类”作为唯一的项目。
9赞 pwaring 5/13/2011
您需要安装 Web 工具项目(在 Help->Install New Software 下查看)才能获得这些选项。
3赞 David Hergert 12/16/2011
Eclipse 似乎是一个不错的选择,但我无法让这一代遵循导入的 XSD。例如,如果我有一个描述 3 个元素的 XSD,其中一个是在引用/导入的 XSD 中定义的 complexType,则它不会为该元素生成。有什么想法吗?
0赞 Adam Matan 4/30/2013
@DavidHergert 一个简单的解决方法是生成存根类型。
1赞 Peter 3/12/2010 #9

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

1赞 Sprotty 8/6/2010 #10

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

Generate an XML Sample from an XSD

1赞 otto.poellath 11/26/2010 #11

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

5赞 rolandpeng 2/25/2011 #12

XML-XIG: XML 实例生成器

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

这个开源会有所帮助。

评论

1赞 Jarekczek 9/7/2012
不是很人性化。抛出很多异常,无法解释后无法使其工作。NullPointerException
7赞 Michal Rames 6/2/2011 #13

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

我使用 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);
0赞 Aravind Yarram 12/19/2011 #14

OpenXSD 库提到它们支持基于 XSD 生成 XML 实例。一探究竟。

评论

0赞 naXa stands with Ukraine 1/5/2018
你能发布一个用法示例吗?
0赞 MarnixKlooster ReinstateMonica 5/15/2012 #15

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

评论

0赞 ka3ak 2/6/2021
我尝试了这个并按照建议运行它: 出现错误:xsd-instance.sh purchase-order.xsd {http://jlibs.org}PurchaseOrderError: Unable to initialize main class jlibs.xml.xsd.XSInstance Caused by: java.lang.NoClassDefFoundError: org/apache/xerces/xs/XSObject
7赞 Pat B 6/6/2012 #16

您还可以使用此处 http://www.wmhelp.com 的 XMLPad(免费使用)来生成 xml 示例。 从菜单 : XSD -> 生成示例 XML 文件。

评论

0赞 Nate Anderson 3/23/2016
当我选择“生成示例数据”时,我收到堆栈溢出或“WMHelp XmlPad 已停止工作”
42赞 yamass 8/23/2012 #17

对于 Intellij Idea 用户:

查看工具 -> XML 操作

enter image description here

似乎效果很好(据我测试过)。

编辑:

如@naXa所述,您现在还可以右键单击 XSD 文件,然后单击“从 XSD 架构生成 XML 文档...”

评论

0赞 Nikita 3/2/2013
有没有办法指定要生成的元素 #(对于序列)?
0赞 FLX 9/22/2014
我测试了这个线程的每个解决方案,效果最好
1赞 Envek 11/30/2014
在最新的 RubyMine(v. 7.0,基于 Intellij Idea)中对我不起作用,带有许多导入的 XSD。我除了错误消息什么都没有。
3赞 Nate Anderson 3/23/2016
“模式编译错误”?
1赞 naXa stands with Ukraine 1/5/2018
在较新的版本中,右键单击 XSD 并选择“从 XSD 架构生成 XML 文档...”
0赞 Bambax 10/14/2012 #18

XML Blueprint 也可以做到这一点;说明在这里

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

它不是免费的,但有 10 天的免费试用期;它似乎快速而高效;不幸的是,它仅适用于 Windows。

0赞 Sphinxxx 6/16/2018 #19

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

评论

0赞 ka3ak 2/6/2021
不幸的是,它没有从 XSD 生成有效的 XML。然而,其他工具在这个任务上失败了——Eclipse、Intellij IDEA甚至XMLSpy。到目前为止,我发现的最好的是 liquid-technologies.com/online-xsd-to-xml-converter 但是,如果 XSD 中存在模式,即使是这个也无法生成有效的 XML。