XML Schema(XSD)验证工具?

Jas*_*git 264 xml validation schema xsd

在办公室,我们正在编写一个应用程序,它将根据我们给出的模式生成XML文件.我们在.XSD文件中有架构.

是否有可用于自动化测试的工具或库来检查生成的XML是否与模式匹配?

我们更喜欢适合商业用途的免费工具,尽管我们不会捆绑架构检查器,因此开发期间只需要开发人员可以使用它.

我们的开发语言是C++,如果这有什么不同,虽然我不认为它应该生成xml文件然后通过在测试中调用单独的程序来进行验证.

Adr*_*uat 234

经过一些研究,我认为最好的答案是Xerces,因为它实现了所有的XSD,是跨平台的并且被广泛使用.我在github上创建了一个小型Java项目,使用默认的JRE解析器从命令行进行验证,该解析器通常是Xerces.这可以在Windows/Mac/Linux上使用.

如果您更愿意使用它,还可以使用C++版本的Xerces.所述StdInParse实用程序可用于在命令行调用它.此外,下面的评论者指出这个更完整的包装工具.

您也可以使用xmllint,它是libxml的一部分.你可能已经安装了它.用法示例:

xmllint --noout --schema XSD_FILE XML_FILE
Run Code Online (Sandbox Code Playgroud)

一个问题是libxml没有实现所有规范,所以你可能遇到问题:(

或者,如果您使用的是Windows,则可以使用msxml,但是需要使用某种包装来调用它,例如本DDJ文章中描述的GUI .然而,似乎大多数人都在Windows上使用XML编辑器,如记事本++(如描述Nate的答案)或XML记事本2007年作为由SteveC建议(也有一些商业的编辑,我在这里就不提).

最后,你会发现不同的程序将会产生不同的结果.这主要是由于XSD规范的复杂性.您可能希望使用多个工具测试架构.

更新:我在博客文章中对此进行了扩展.

  • 有没有办法让程序使用xsi:schemaLocation而不是手动提供所有XSD? (3认同)
  • 不幸的是,“xmllint”不符合 XML 正则表达式,因此某些有效的 XML 正则表达式将无法通过它 (2认同)

Nat*_*ate 111

Notepad ++有一个名为XML Tools的插件,它提供针对XSD的XML验证和验证.

你可以在这里看到如何使用它.

  • 使用5.8.7版本,Notepad ++自带的插件管理器("插件/插件管理器")使安装过程自动化. (16认同)
  • -1,这个插件很难安装 (5认同)
  • 很棒的插件.有关安装的帮助,请参阅[Notepad ++ XmlTools Not Installing](http://stackoverflow.com/questions/2274154/notepad-xmltools-not-installing). (5认同)
  • 我测试了npp 5.8.6,XMLTools 2.3.1 unicode beta2 r805,它工作正常. (2认同)

Cha*_*ffy 22

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
Run Code Online (Sandbox Code Playgroud)

  • 你知道警告对于不完全支持xml架构有多严重吗? (3认同)
  • 鉴于xmlstarlet只使用了libxml2,可能更容易使用与libxml2捆绑在一起的xmllint,并在接受的答案中进行了解释. (3认同)
  • 从其他答案来看,xmlstarlet的xsd实现有点弱. (2认同)

Ste*_*veC 15

对于Windows,有免费的XML Notepad 2007.您可以选择XSD进行验证


小智 5

DecisionSoft 的在线XML Schema Validator允许您根据给定的模式检查XML文件.