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


186

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

编辑

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


8
对于这些问题,我看不到与问答形式或要求不符的答案debate, arguments, polling, or extended discussion
mjn

Answers:


29

我认为Oxygen(http://www.oxygenxml.com/)也能做到这一点,但这是另一种商业产品。不过,这是一个不错的选择……我强烈建议所有从事XML工作的人使用它。它也带有一个不错的Eclipse插件。

我确实相信有30天的免费免费试用。


我有一堆XSD,这些XSD依次继承了不同XSD的架构,我需要从该XSD生成用于测试目的的XML文件,正在使用oxygenXML进行此操作,但是当我尝试这样做时,它对我不起作用,并且它说请定义根节点,但不允许我这样做。因此,如果有人使用过OxyXML,建议这样做的方法是什么?
雷切尔

谢谢leveland。这也回答了我的问题!如果您想回答我的问题:stackoverflow.com/questions/7041388/…,我很乐意将您的答案标记为答案。
Eric H

179

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

  1. 打开您的XSD文档
  2. 切换到XML模式浏览器
  3. 右键单击根节点,然后选择“ Generate Sample Xml”。

XML Schema Explorer的屏幕截图


15
是的,这是最简单的方法。打开XSD,切换到XML Schema Explorer,选择根节点,右键单击并选择“ Generate Sample Xml”。
balint

+1谢谢@Sam Warwick和@balint。这真的很有帮助!
jessegavin 2011年

3
我将它与VS2008一起使用,但是在VS2010中找不到。有人可以确认这仍然存在吗?
西蒙(Simon)

与Simon一样:我在VS2010中也找不到。根据MSDN,它应该仍然存在,但是它不会在UI中显示任何地方... :-(
Martijn 2013年

6
@Simon:右键单击模式资源管理器中的元素之一,只会得到“生成示例XML”。元素通过绿色的左/右尖括号“ <>”以图形方式描绘。您可能右键单击一个类型,并且generate消息只会为元素生成它(这很有意义)。
Miguel Sevilla

126

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

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


谢谢!Eclipse是免费的,这是完美的解决方案。
Akku

你们碰巧知道什么Eclipse功能提供了此功能吗?我的“生成”子菜单中只有“ JAXB类”。
otto.poellath 2011年

9
您需要安装Web工具项目(在“帮助”->“安装新软件”下查看)以获取这些选项。
令人惊叹的2011年

3
Eclipse似乎是一个不错的选择,但我一代人都无法跟随导入的XSD。例如,如果我有一个描述3个元素的XSD,而其中一个是在引用/导入的XSD中定义的complexType,则它不会为该元素生成。有任何想法吗?
David Hergert 2011年

@DavidHergert一个简单的解决方法是生成存根类型。
亚当·马坦

32

对于Intellij Idea用户:

看看工具-> XML操作

在此处输入图片说明

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

编辑:

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


有没有一种方法来指定要生成的元素数量(针对序列)?
Nikita 2013年

我测试了该线程的每种解决方案,并且效果最佳
FLX 2014年

1
在具有许多导入的XSD的最新RubyMine(v。7.0,基于Intellij Idea)中对我不起作用。除了错误消息外,我什么也没有。
Envek

3
“架构编译错误”?
红豌豆

1
在较新的版本中,右键单击XSD并选择“从XSD Schema生成XML文档...”
naXa

12

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


3
到Sourceforge.net下载的直接链接是:sourceforge.net/projects/camprocessor

@Pyderman-这是您的设置-查找如何更改它们。
Ghoti

10

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

它的README.txt状态为:

Sun XML Generator是一个Java工具,可以从几种模式中生成各种XML实例。它支持DTD,RELAX命名空间,RELAX核心,TREX和W3C XML模式第1部分的子集。[...]

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

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

java -jar xmlgen.jar -help

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


非常好!虽然有点限制。我在导入其他XSD的XSD上进行了尝试,但失败了。但是在DTD上,它工作得很好。谢谢!
lindelof

1
当前链接:主页下载xmlgen.zip仅在nigthly目录中。我确认无法从xsd生成样本。
Jarekczek 2012年

就我而言,需要使用该--example文件来包含可用于生成新示例文件的令牌。需要一个样本来制作样本!不容易...
红豌豆

java.net链接基本上已死。
RedGrittyBrick

10

XMLSpy为您做到了,尽管那不是免费的...

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


它产生的东西,但你没有了它太多的控制:你可以选择顶层元素和一些常规选项,但你不能使用XMLSpy的产生与设置许多变种等测试用例的
汉斯-彼得·斯托尔

XMLSpy看起来不错,但生成的xml随后无法针对用于生成它的xsd进行验证。失败。它还barfed在postiveinteger现场-把*ERROR*在代替
蒂姆·阿贝尔

7

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

我使用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);

7

您还可以使用XMLPad(免费使用),在这里找到http://www.wmhelp.com 生成你的XML样本。从菜单:XSD->生成示例XML文件。


当我选择“生成示例数据”时,出现堆栈溢出或“ WMHelp XmlPad已停止工作”的情况
Red Pea 2016年

5

Microsoft已发布了一个“文档生成器”工具作为示例。 本文是详细描述示例应用程序的体系结构和操作的文章

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

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


上面的链接是MSDN上一篇名为“生成XML文档的XML模式”
山姆·沃里克

安装程序将一堆C#代码放到您的计算机上。只需将它们转储到LinqPad中,就可以使用免费的XML实例生成器。da!
肖恩·基伦

9年后,这对于XSD仍然有效。
Mikanikal


4

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


1

XMLBlueprint 7.5可以执行以下操作:-从dtd生成示例xml-从放松ng模式生成示例xml-从xml模式生成示例xml


1

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


1

Liquid XML Studio有一个XML Sample Generator向导,它将根据XML Schema 生成示例XML文件。产生的数据似乎符合该模式(只是无法为正则表达式模式生成数据)。

从XSD生成XML示例





By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.