Windows的命令行XML验证程序

时间:2009-07-23 15:38:35

标签: windows xml validation command-line xsd

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

当我没有通过谷歌找到任何明确的赢家时,我在这里找到了similar question,但是没有一个工具可以满足我的需求:

  • 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。

6 个答案:

答案 0 :(得分:13)

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

>  xmllint --version
xmllint: using libxml version 20627

示例输出:

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>

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>

注意:我注意到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 

答案 1 :(得分:3)

正如13ren所述,libxml的xmllint会报告行号 - 也许你有版本问题。您可能会发现从http://www.zlatkovic.com/libxml.en.html

获取libxml / libxslt工具的本机(非cygwin)版本很有用。

您可能还想查看来自Sun的msv。它不是XSD的完整实现,但可以完成这项工作(我通常将它用于RelaxNG验证)

答案 2 :(得分:2)

我建议使用Windows Powershell PowerShell Community eXtensions。 PSCX具有Test-Xml cmdlet,其中包含以下Get-Help详细说明:

  

测试良构性并根据XML Schema选择性地进行验证。它不处理指定targetName   空间。要查看验证错误消息,请指定-Verbose标志。

我不知道它是否用麻布来报告错误,但是3分4也不错。

答案 3 :(得分:1)

您可以尝试其中一个Visual Studio 2008 Express版本。现在有更好的XML支持,包括验证,当然还有XML Intellisense,XML片段和XML Schema视图。

答案 4 :(得分:1)

无法评论,但Igor Zlatkovic的最新版xmllint(20708)Windows端口也提供了行号。

答案 5 :(得分:0)

Xerces-J附带了一个示例应用程序jaxp.SourceValidator。您可以将XML文件提供给它,然后验证它。

对于Xerces-C,我自己没有使用它,但我知道它不需要所有的Visual C ++,它只需要运行时文件。这些可以从Microsoft单独下载。似乎有一个示例应用程序可以满足您的需求 - 请参阅StdInParse