提问人:lindelof 提问时间:8/20/2008 最后编辑:lindelof 更新时间:9/11/2019 访问量:272547
如何从他们的 DTD 或 XSD 生成示例 XML 文档?
How to generate sample XML documents from their DTD or XSD?
问:
我们正在开发一个涉及大量 XML 转换的应用程序。我们本身没有任何正确的输入测试数据,只有 DTD 或 XSD 文件。我们想从这些文件自己生成测试数据。有没有一种简单/免费的方法可以做到这一点?
编辑
显然没有免费的工具,我同意 OxygenXML 是最好的工具之一。
答:
XMLSpy 为您做到了这一点,尽管这不是免费的......
我相信 Liquid Xml Studio 为您做到了,并且是免费的,但我个人并没有使用它来创建测试数据。
评论
postiveinteger
*ERROR*
我认为 Oxygen (http://www.oxygenxml.com/) 也做到了这一点,但这是另一种商业产品。不过,这是一个很好的......我强烈推荐给任何做大量XML工作的人。它也带有一个不错的 Eclipse 插件。
我确实相信有一个免费的、功能齐全的 30 天试用期。
评论
在 Visual Studio 2008 SP1 及更高版本中,XML 架构资源管理器可以创建包含一些基本示例数据的 XML 文档:
- 打开 XSD 文档
- 切换到 XML 架构资源管理器
- 右键单击根节点,然后选择“生成示例 Xml”
评论
xsd:choice
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
评论
您可以使用 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 许可下发布的;源代码可从此处访问
评论
--example
Microsoft 发布了一个“文档生成器”工具作为示例。本文详细介绍了示例应用的体系结构和操作。
如果您只想运行示例生成工具,请单击此处并安装 MSI。
它是免费的。源可用。需要 .NET Framework 才能运行。仅适用于 XSD.(不适用于 Relax NG 或 DTD)。
评论
Microsoft Office 具有“InfoPath”,它将 XSD 作为导入,并允许您快速轻松地定义用于创建 XML 文件的基于表单的编辑器。它有两种模式 - 一种是定义表单的模式,另一种是通过填写表单创建 XML 文件的模式。我相信它最初是随 Office 2003 一起提供的,大多数人从未安装过它。令我震惊的是,我竟然如此喜欢它。
在最新版本的免费开源 Eclipse IDE 中,您可以从 DTD 和 XSD 文件生成 XML 文档。右键单击给定的 *.dtd 或 *.xsd 文件,然后选择“生成 -> XML 文件...”。您可以选择要生成的根元素,以及是否应生成可选属性和元素。
当然,您也可以使用 Eclipse 来创建和编辑 DTD 和 XSD 模式文件。而且您无需安装任何插件。它包含在标准发行版中。
评论
XMLBlueprint 7.5 可以执行以下操作: - 从 DTD 生成示例 XML - 从 Relax NG 模式生成示例 XML - 从 XML 架构生成示例 XML
Liquid XML Studio 有一个 XML 示例生成器向导,它将从 XML 模式构建示例 XML 文件。生成的数据似乎符合架构(它只是无法为正则表达式模式生成数据)。
SoapUI 的开源版本可以从 WSDL(包含 XSD 类型定义)生成 SOAP 请求,因此看起来有此功能的开源实现。不幸的是,我还没有弄清楚哪个图书馆习惯了这个。
XML-XIG: XML 实例生成器
http://xml-xig.sourceforge.net/
这个开源会有所帮助。
评论
NullPointerException
到目前为止,似乎没有人能够回答这个问题:)
我使用 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);
OpenXSD 库提到它们支持基于 XSD 生成 XML 实例。一探究竟。
评论
为了完整起见,我将添加 http://code.google.com/p/jlibs/wiki/XSInstance,这在类似的(但特定于 Java 的)问题中提到过:任何 Java “API” 来从 XSD 生成示例 XML?
评论
xsd-instance.sh purchase-order.xsd {http://jlibs.org}PurchaseOrder
Error: Unable to initialize main class jlibs.xml.xsd.XSInstance Caused by: java.lang.NoClassDefFoundError: org/apache/xerces/xs/XSObject
您还可以使用此处 http://www.wmhelp.com 的 XMLPad(免费使用)来生成 xml 示例。 从菜单 : XSD -> 生成示例 XML 文件。
评论
对于 Intellij Idea 用户:
查看工具 -> XML 操作
似乎效果很好(据我测试过)。
编辑:
如@naXa所述,您现在还可以右键单击 XSD 文件,然后单击“从 XSD 架构生成 XML 文档...”
评论
XML Blueprint 也可以做到这一点;说明在这里
http://www.xmlblueprint.com/help/html/topic_170.htm
它不是免费的,但有 10 天的免费试用期;它似乎快速而高效;不幸的是,它仅适用于 Windows。
还有 http://xsd2xml.com/,一个在线 XSD 到 XML 生成器
评论
下一个:转义 XML 标记内容
评论
debate, arguments, polling, or extended discussion