ChatGPT解决这个技术问题 Extra ChatGPT

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

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

编辑

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

我看不到这个不符合问答格式的问题的答案,或者征求debate, arguments, polling, or extended discussion

J
Justin

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

打开您的 XSD 文档 切换到 XML Schema Explorer 右键单击根节点并选择“Generate Sample Xml”

https://i.stack.imgur.com/rKUY6.png


是的,这是最简单的方法。打开XSD,切换到XML Schema Explorer,选择根节点,右键选择“Generate Sample Xml”。
我在 VS2008 中使用过这个,但在 VS2010 中找不到这个。任何人都可以确认这仍然存在吗?
和 Simon 一样:我在 VS2010 中也找不到这个。根据 MSDN,它应该仍然存在,但它不会出现在 UI 中的任何地方...... :-(
@Simon:当您右键单击模式资源管理器中的一个元素时,您只会获得“生成示例 XML”。元素通过绿色的左/右尖括号以图形方式描述:“<>”。您可能正在右键单击一个类型,并且生成消息只会为元素生成它(这是有道理的)。
@TimAbell ,如果它是 xsd:choice 那么示例 xml 文件 只能 包含该选项之一。 msdn.microsoft.com/en-us/library/ms256109(v=vs.110).aspx
F
Florian Fankhauser

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

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


谢谢! Eclipse 是免费的,这是完美的解决方案。
你们碰巧知道什么 Eclipse 特性提供了这个功能吗?我的“生成”子菜单将“JAXB 类”作为唯一的项目。
您需要安装 Web Tools Project(在 Help->Install New Software 下查看)以获得这些选项。
Eclipse 似乎是一个不错的选择,但我无法让这一代遵循导入的 XSD。例如,如果我有一个描述 3 个元素的 XSD,其中一个是在引用/导入的 XSD 中定义的 complexType,它不会为该元素生成。有任何想法吗?
@DavidHergert 一个简单的解决方法是生成存根类型。
y
yamass

对于 Intellij Idea 用户:

查看工具 -> XML 操作

https://i.stack.imgur.com/jUyW4.png

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

编辑:

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


有没有办法指定要生成的元素数量(对于序列)?
我测试了这个线程的每个解决方案,效果最好
在带有许多导入的 XSD 的最新 RubyMine(v. 7.0,基于 Intellij Idea)中不适用于我。除了错误消息,我什么都没有。
“架构编译错误”?
在较新的版本中,右键单击 XSD 并选择“从 XSD 架构生成 XML 文档...”
l
levand

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

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


我有一堆 XSD,它们依次从不同的 XSD 继承模式,我需要从这个 XSD 生成一个用于测试目的的 XML 文件,我正在使用oxyXML 来执行此操作,但是当我尝试这样做时,它对我不起作用并且它说请定义根节点,但它不允许我这样做。因此,如果有人曾使用过oxyXML,那么是否建议解决这个问题?
谢谢水平。这也回答了我的问题!如果您想来回答我的问题:stackoverflow.com/questions/7041388/…,我很乐意将您的问题标记为答案。
我为此尝试了许多选项,并发现 Oxygen 是最好的。它是商业的,但确实提供免费试用。我用它从有史以来最臃肿的架构中生成 XML:DDEX ERN,效果很好。其他人做不到。
佚名

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


Sourceforge.net 下载的直接链接是:sourceforge.net/projects/camprocessor
@Pyderman - 这是你的设置 - 查找如何更改它们。
m
m01

您可以使用 Sun/Oracle Multi-Schema Validator 中的 XML 实例生成器。

它的 README.txt 状态:

Sun XML Generator 是一个 Java 工具,用于从多种模式生成各种 XML 实例。它支持 DTD、RELAX 命名空间、RELAX Core、TREX 和 W3C XML Schema Part 1 的一个子集。[...] 这是一个命令行工具,可以从模式生成有效和无效实例。它可用于为需要符合特定模式的 XML 应用程序生成测试用例。

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

java -jar xmlgen.jar -帮助

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


非常好!不过有点局限。我在导入其他 XSD 的 XSD 上进行了尝试,但失败了。但是在 DTD 上它工作得很好。谢谢!
当前链接:homepagedownloadsxmlgen.zip 仅在 nigthly 目录中。我确认无法从我的 xsd 生成样本。
就我而言,需要使用 --example 文件来包含可用于生成新示例文件的令牌。制作样品需要样品!不容易...
java.net 链接基本上是死的。
k
karlingen

XMLSpy 会为您执行此操作,虽然这不是免费的...

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


它会生成一些东西,但您无法对其进行太多控制:您可以选择顶级元素和一些常规选项,但您不能使用 XMLSpy 生成具有许多变体的测试用例集等。
XMLSpy 看起来不错,但生成的 xml 然后无法针对用于生成它的 xsd 进行验证。失败。它还在 postiveinteger 字段上吐槽 - 将 *ERROR* 放入
M
Michal Rames

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

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

P
Pat B

您还可以使用此处 http://www.wmhelp.com 中的 XMLPad(免费使用)来生成您的 xml 示例。从菜单:XSD ->生成示例 XML 文件。


当我选择“生成样本数据”时,出现堆栈溢出或“WMHelp XmlPad 已停止工作”
C
Cheeso

Microsoft 已发布“文档生成器”工具作为示例。 This is an article 详细描述了示例应用程序的架构和操作。

如果您只想运行示例生成工具,click here 并安装 MSI。

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


上面的链接是 MSDN 上一篇名为“Generating XML Documents from XML Schemas”的文章
安装程序将一堆 C# 代码放到您的机器上。只需将它们转储到 LinqPad 中,您就拥有了免费的 XML 实例生成器。达达!
9 年后,这仍然适用于 XSD。
r
rolandpeng

XML-XIG:XML 实例生成器

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

这个开源会很有帮助。


不是很用户友好。抛出很多异常,在得到无法解释的 NullPointerException 后无法使其工作。
K
Kieveli

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


P
Peter

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


o
otto.poellath

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


S
Sprotty

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

https://i.stack.imgur.com/OJDtO.png


A
Aravind Yarram

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


你能发布一个使用示例吗?
C
Community

为了完整起见,我将添加 http://code.google.com/p/jlibs/wiki/XSInstance,这在类似(但特定于 Java)的问题中有所提及:Any Java "API" to generate Sample XML from XSD?


我试过这个并按照建议运行它: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
B
Bambax

XML Blueprint 也可以做到这一点;这里的说明

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

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


S
Sphinxxx

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


不幸的是,它没有从 XSD 生成有效的 XML。然而,其他工具在这个任务中失败了——Eclipse、Intellij IDEA 甚至 XMLSpy。到目前为止我发现的最好的是 liquid-technologies.com/online-xsd-to-xml-converter 但如果 XSD 中有模式,即使这个也无法生成有效的 XML。

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅