首页 / 知识

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

2023-04-12 13:50:00

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

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

编辑

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


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

  • 打开您的XSD文档
  • 切换到XML模式浏览器
  • 右键单击根节点,然后选择" Generate Sample Xml"
  • Screenshot of the XML Schema Explorer


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

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


    对于Intellij Idea用户:

    看看工具-> XML操作

    enter image description here

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

    编辑:

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


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

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


    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 Multi-Schema Validator的一部分。

    它的README.txt状态为:

    Sun XML Generator is a Java tool to generate various XML instances from
    several kinds of schemas. It supports DTD, RELAX Namespace, RELAX Core,
    TREX, and a subset of W3C XML Schema Part 1. [...]

    This is a command-line tool that can generate both valid and invalid
    instances from schemas. It can be used for generating test cases for XML
    applications that need to conform to a particular schema.

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

    java -jar xmlgen.jar -help

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


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

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


    您也可以使用http://www.xmlPad.com(免费使用)。
    elp.com
    生成您的xml示例。
    从菜单:XSD->生成示例XML文件。


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

    我使用EclipseLink的MOXy动态生成绑定类,然后以递归方式遍历绑定类型。它有些沉重,但是一旦实例化对象树,它就允许XPath值注入:

    1
    2
    3
    4
    5
    6
    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是非常简单的递归方法:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    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非常简单:

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

    XML-XIG:XML实例生成器

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

    这个开源会有所帮助。


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

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

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


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


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


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

    Generate an XML Sample from an XSD


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


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


    OpenXSD库提到它们支持基于XSD生成XML实例。检查出。


    为了完整起见,我将添加http://code.google.com/p/jlibs/wiki/XSInstance,该问题在类似(但特定于Java)的问题中提到:是否有Java" API"可以从XSD生成示例XML?


    XML蓝图也可以做到这一点。这里的说明

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

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


    文档转换输入文件

    最新内容

    相关内容

    热门文章

    推荐文章

    标签云

    猜你喜欢