在办公室,我们目前正在编写一个应用程序,它将根据给定的模式生成XML文件。我们在. xsd文件中拥有模式。
是否有工具或库可以用于自动测试,以检查生成的XML是否与模式匹配?
我们更喜欢适合商业用途的免费工具,尽管我们不会捆绑模式检查器,因此它只需要在开发过程中供开发人员使用。
我们的开发语言是c++,如果这有什么不同的话,尽管我不认为它应该,因为我们可以生成xml文件,然后通过在测试中调用一个单独的程序来进行验证。
在办公室,我们目前正在编写一个应用程序,它将根据给定的模式生成XML文件。我们在. xsd文件中拥有模式。
是否有工具或库可以用于自动测试,以检查生成的XML是否与模式匹配?
我们更喜欢适合商业用途的免费工具,尽管我们不会捆绑模式检查器,因此它只需要在开发过程中供开发人员使用。
我们的开发语言是c++,如果这有什么不同的话,尽管我不认为它应该,因为我们可以生成xml文件,然后通过在测试中调用一个单独的程序来进行验证。
当前回答
来自DecisionSoft的在线XML模式验证器允许您根据给定的模式检查XML文件。
其他回答
另一个在线XML模式(XSD)验证器:http://www.utilities-online.info/xsdvalidation/。
可以在http://www.xml-buddy.com上找到用于快速简便XML验证的XML编辑器
您只需要运行安装程序,然后就可以使用易于使用的桌面应用程序或命令行验证XML文件。此外,您还可以获得Schematron和RelaxNG的支持。批处理验证也支持…
2012年1月13日更新:命令行工具可以免费使用,并使用Xerces作为XML解析器。
经过一番研究,我认为最好的答案是Xerces,因为它实现了XSD的所有功能,是跨平台的,而且被广泛使用。我在github上创建了一个小型Java项目,使用默认的JRE解析器(通常是Xerces)从命令行进行验证。这可以在Windows/Mac/Linux上使用。
如果您愿意使用的话,还有一个c++版本的Xerces可用。可以使用StdInParse实用程序从命令行调用它。此外,下面的一个评论指出了这个更完整的包装实用程序。
还可以使用xmllint,它是libxml的一部分。您很可能已经安装了它。使用示例:
xmllint --noout --schema XSD_FILE XML_FILE
一个问题是libxml并没有实现所有的规范,所以你可能会遇到问题:(
或者,如果您使用的是Windows,则可以使用msxml,但需要某种包装器来调用它,例如DDJ文章中描述的GUI。然而,似乎Windows上的大多数人都使用XML编辑器,比如notepad++(如Nate的回答中所描述的)或SteveC建议的XML notepad2007(还有一些商业编辑器,我在这里不提)。
最后,你会发现,不幸的是,不同的程序会给出不同的结果。这主要是由于XSD规范的复杂性。您可能希望使用几种工具来测试您的模式。
更新:我在一篇博客文章中对此进行了扩展。
notepad++有一个名为XML Tools的插件,它提供针对XSD的XML验证和验证。
你可以在这里看到如何使用它。
Xmlstarlet是一个命令行工具,可以完成以下工作:
$ xmlstarlet val --help XMLStarlet Toolkit: Validate XML document(s) Usage: xmlstarlet val <options> [ <xml-file-or-uri> ... ] where <options> -w or --well-formed - validate well-formedness only (default) -d or --dtd <dtd-file> - validate against DTD -s or --xsd <xsd-file> - validate against XSD schema -E or --embed - validate using embedded DTD -r or --relaxng <rng-file> - validate against Relax-NG schema -e or --err - print verbose error messages on stderr -b or --list-bad - list only files which do not validate -g or --list-good - list only files which validate -q or --quiet - do not list files (return result code only) NOTE: XML Schemas are not fully supported yet due to its incomplete support in libxml2 (see http://xmlsoft.org) XMLStarlet is a command line toolkit to query/edit/check/transform XML documents (for more information see http://xmlstar.sourceforge.net/)
在你的情况下,用法应该是这样的:
xmlstarlet val --xsd your_schema.xsd your_file.xml