Windows的命令行XML验证程序

Ben*_*ank 15 xml windows validation command-line xsd

我总是发现针对模式的验证是对thinkos的一个无价之宝,并希望将验证检查作为项目的一部分,我经常需要手工编写几百行的XML文件.我的文本编辑器有一个相当不错的CLI集成功能,所以我正在寻找一个命令行验证器.

当我没有通过谷歌找到任何明确的赢家时,我在这里找到了一个类似的问题,但是没有一个工具能够满足我的需求:

  • libxml(通过cygwin) - 不报告行号; 我不知道我的错误在哪里!
  • msxml - 无法从命令行运行?
  • xerces-c - 似乎需要Visual C的副本?
  • xerces2-j - 无法从命令行运行?
  • xmlstarlet - XSD支持不足*

(*我正在验证的模式使用替换组 - 不恰当,但它在项目的外部,所以我无法更改它 - 这导致xmlstarlet甚至在有效文件上阻塞.)

通常情况下,这是解决一个问题的重点,在这个问题上,我放弃寻找现有的解决方案并获得Python-hammer,但Python的XML支持是众所周知的......好吧......实际上,让我们把它留在"臭名昭着" .

所以我回来寻找一个预先存在的工具.我的要求非常简单:

  • 在Win32上运行(特别是Windows XP SP3)
  • 命令行; 我的编辑器可以使用stdin/-out/-err,参数,临时文件等的任何组合.
  • 合理完成XSD支持(特别是命名空间和替换组)
  • 报告错误发生的行号!

这样的工具存在吗?我不想安装Visual Studio和朋友(太臃肿,IMO),但我已经安装了Cygwin和Python.

13r*_*ren 13

您的第一个选项xmllint(libxml2)确实为xml(以及xsd)中的错误提供了行号.您可能只需要更高版本.我刚用我的副本确认了两个,这是:

>  xmllint --version
xmllint: using libxml version 20627
Run Code Online (Sandbox Code Playgroud)

示例输出:

invalidXml.xml:4: element c: Schemas validity error : Element 'c': This element is not expected. Expected is ( b ).
invalidXml.xml fails to validate
<?xml version="1.0"?>
<invalidXmlEg>
  <a/>
<!--  <b></b> -->
  <c/>
</invalidXmlEg>
Run Code Online (Sandbox Code Playgroud)

xsd的位置是:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="invalidXmlEg">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="a" type="xs:string" />
        <xs:element name="b" type="xs:string" />
        <xs:element name="c" type="xs:string" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>
Run Code Online (Sandbox Code Playgroud)

注意:我注意到xmllint将接受它不应该的元素名称(例如" <invalidXml.xsd>"),但这似乎不会影响您的任务.

编辑添加版本的"编译时"部分:

 compiled with: Threads Tree Output Push Reader
 Patterns Writer SAXv1 FTP HTTP DTDValid HTML Legacy
 C14N Catalog XPath XPointer XInclude Iconv ISO8859X
 Unicode Regexps Automata Expr Schemas Schematron
 Modules Debug Zlib 
Run Code Online (Sandbox Code Playgroud)