繁体   English   中英

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

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

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

编辑

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

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

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

XML 架构资源管理器的屏幕截图

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

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

对于 Intellij Idea 用户:

看看工具 -> XML 操作

在此处输入图片说明

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

编辑:

正如@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

XMLSpy为你做这件事,虽然那不是免费的......

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

您可以使用 XML Instance Generator,它是Sun/Oracle Multi-Schema Validator 的一部分

它的 README.txt 声明:

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

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

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

java -jar xmlgen.jar -help

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

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

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

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

XML-XIG:XML 实例生成器

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

这个开源会很有帮助。

Microsoft 发布了一个“文档生成器”工具作为示例。 这篇文章比较详细地描述了示例应用程序的架构和操作。

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

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

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

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

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

从 XSD 生成 XML 示例

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

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

XML Blueprint 也这样做; 说明在这里

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

它不是免费的,但有 10 天的免费试用期; 看起来又快又高效; 不幸的是,它仅适用于 Windows。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM