用于Windows的命令行XMLvalidation程序

我总是发现对一个模式的validation是对thinkos的一个无价的区域,并且希望将validation检查作为一个项目的一部分,我经常需要手写长度为几百行的XML文件。 我的文本编辑器有一个相当不错的CLI集成function,所以我正在寻找一个命令行validation程序。

当我没有通过谷歌find任何明确的获胜者时,我在这里四处探索,发现了一个类似的问题 ,但没有一个工具build议那里适合我的需要:

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

(*我正在validation的模式使用replace组 – 不适当的,但它是项目的外部,所以我不能改变它 – 这导致即使在有效的文件xmlstarlet扼杀。

通常情况下,这是解决一个问题的关键,在这个问题上,我放弃寻找现有的解决scheme,并达成Python的锤子,但Python的XML支持是臭名昭着的…呃…实际上,让我们把它放在“臭名昭着的” 。

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

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

这样的工具是否存在? 我宁愿不必安装Visual Studio和朋友(太臃肿,国际海事组织),但我已经有Cygwin和Python安装。

你的第一个选项,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 modulees Debug Zlib 

如上所述,libxml的xmllint报告行号 – 也许你有版本问题。 您可能会发现从http://www.zlatkovic.com/libxml.en.html获取libxml / libxslt工具的本地(非cygwin)版本

你可能也想看看来自Sun的 msv。 这不是XSD的完整实现,但可能会做这个工作(我通常使用它来进行RelaxNG验证)

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

测试格式良好,并可选择验证XML Schema。 它不处理指定targetName空间。 要查看验证错误消息,请指定-Verbose标志。

我不知道是否报告与linenumbers错误,但3出4不坏。

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

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

Xerces-J附带一个示例应用程序jaxp.SourceValidator 。 你可以喂它你的XML文件,它会验证它。

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