当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何从DTD或XSD生成示例XML文档?》经验,为你挑选了11个好方法。

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

编辑

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



1> Sam Warwick..:

在Visual Studio 2008 SP1和更高版本中,XML Schema Explorer可以创建包含一些基本样本数据的XML文档:

    打开XSD文档

    切换到XML Schema Explorer

    右键单击根节点,然后选择"生成示例Xml"

XML Schema Explorer的屏幕截图


是的,这是最简单的方法.打开XSD,切换到XML Schema Explorer,选择根节点,右键单击并选择"Generate Sample Xml".
@Simon:当您右键单击架构资源管理器中的一个元素时,您只能获得"生成示例XML".元素通过绿色左/右尖括号以图形方式描绘:"<>".您可能正确地单击了一个类型,生成消息将仅为元素生成它(这是有意义的).
我在VS2008上使用过它,但我在VS2010中找不到这个.任何人都可以确认这仍然存在吗?

2> Florian Fank..:

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

当然,您也可以使用Eclipse来创建和编辑DTD和XSD架构文件.而且您不需要安装任何插件.它包含在标准分发中.


您需要安装Web Tools项目(在"帮助" - >"安装新软件"下查看)以获取这些选项.
Eclipse似乎是一个不错的选择,但我无法让这一代跟随导入的XSD.例如,如果我有一个描述3个元素的XSD,其中一个是在引用/导入的XSD中定义的complexType,则不会为该元素生成.有任何想法吗?

3> yamass..:

对于Intellij Idea用户:

看一下Tools - > XML Actions

在此输入图像描述

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

编辑:

正如@naXa所提到的,您现在也可以右键单击XSD文件并单击"从XSD架构生成XML文档..."


"架构编译错误"?

4> levand..:

我认为Oxygen(http://www.oxygenxml.com/)也是如此,但这是另一种商业产品.虽然这是一个很好的...我强烈建议任何人做很多XML工作.它也有一个很好的Eclipse插件.

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



5> 小智..:

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


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

6> SCdF..:

XMLSpy为你做到了这一点,虽然那不是免费的......

我相信Liquid Xml Studio为您提供并且是免费的,但我没有亲自使用它来创建测试数据.



7> 小智..:

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

这是README.txt声明:

Sun XML Generator是一个Java工具,用于从多种模式生成各种XML实例.它支持DTD,RELAX命名空间,RELAX Core,TREX和W3C XML Schema Part 1的子集.[...]

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

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

java -jar xmlgen.jar -help

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



8> 小智..:

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

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



9> Pat B..:

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



10> 小智..:

Microsoft已发布"文档生成器"工具作为示例. 这篇文章详细描述了示例应用程序的体系结构和操作.

如果您只想运行样本生成工具,请单击此处并安装MSI.

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



11> 小智..:

XML-XIG:XML实例生成器

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

这个开源会很有帮助.

推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有