XML Schema(XSD)验证工具?
当前,我们在办公室正在编写一个应用程序,该应用程序将根据给定的模式生成XML文件。我们在.XSD文件中具有架构。
是否可以使用工具或者库来进行自动化测试,以检查生成的XML是否与模式匹配?
尽管我们不会捆绑模式检查器,所以我们希望使用适合于商业用途的免费工具,因此它仅需要开发人员在开发过程中使用。
如果有什么不同,我们的开发语言是C ++,尽管我认为它不应该,因为我们可以生成xml文件,然后通过在测试中调用单独的程序进行验证。
解决方案
我使用Xerces:
http://xerces.apache.org/xerces-c/
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
经过研究,我认为最好的答案是Xerces,因为它实现了所有XSD,并且是跨平台的并且被广泛使用。我在github上创建了一个小型Java项目,以使用默认的JRE解析器(通常为Xerces)从命令行进行验证。可以在Windows / Mac / Linux上使用。
如果我们愿意的话,还有Xerces的C ++版本。 StdInParse实用程序可用于从命令行调用它。另外,下面的注释者指向此更完整的包装器实用程序。
我们还可以使用xmllint,它是libxml的一部分。我们可能已经安装了它。用法示例:
xmllint --noout --schema XSD_FILE XML_FILE
一个问题是libxml并没有实现所有规范,因此我们可能会遇到问题:(
另外,如果我们使用的是Windows,则可以使用msxml,但是需要某种包装程序来调用它,例如DDJ文章中介绍的GUI。但是,似乎Windows上的大多数人都使用XML编辑器,例如Notepad ++(如Nate的回答所述)或者SteveC建议的XML Notepad 2007(也有一些商业编辑器,在这里我不会提及)。
最后,不幸的是,我们会发现不同的程序会产生不同的结果。这主要是由于XSD规范的复杂性。我们可能想用几种工具测试模式。
更新:我已经在博客文章中对此进行了扩展。
http://www.xmlvalidation.com/
(请确保选中"根据外部XML模式验证"框)
DecisionSoft的在线XML模式验证器允许我们根据给定的模式检查XML文件。
Notepad ++的一个名为XML Tools的插件提供了针对XSD的XML验证和验证。
我们可以在此处查看如何使用它。
可通过http://www.xml-buddy.com获得用于快速简便地进行XML验证的XML编辑器。
我们只需要运行安装程序,然后即可使用易于使用的桌面应用程序或者命令行来验证XML文件。此外,我们还将获得对Schematron和RelaxNG的支持。还支持批量验证...
2012年1月13日更新:命令行工具可免费使用,并将Xerces用作XML解析器。
对于Windows,有免费的XML Notepad 2007.
我们可以选择XSD进行验证
我只是在学习模式。我正在使用RELAX NG并使用xmllint进行验证。 xmlllint发出的错误使我感到沮丧。我希望他们能提供更多信息。
如果XML中的属性错误,则xmllint会告诉我们不支持的属性的名称。但是,如果我们缺少XML中的属性,则只会收到一条消息,提示无法验证该元素。
我正在使用一些非常复杂的规则来处理一些非常复杂的XML,对此我是陌生的,因此要查找缺少的属性会花费很长时间。
更新:我刚刚发现了一个我非常喜欢的Java工具。它可以像xmllint这样的命令行运行,并且支持RELAX NG:https://msv.dev.java.net/