[英]Command-line XML validator for Windows
我总是发现针对模式的验证是对thinkos的一个无价之宝,并希望将验证检查作为项目的一部分,我经常需要手工编写几百行的XML文件。 我的文本编辑器有一个相当不错的CLI集成功能,所以我正在寻找一个命令行验证器。
当我没有通过谷歌找到任何明确的赢家时,我在这里找到了一个类似的问题 ,但是没有一个工具能够满足我的需求:
(*我正在验证的模式使用替换组 - 不恰当,但它在项目外部,所以我无法更改它 - 这导致xmlstarlet
甚至在有效文件上窒息。)
通常情况下,这是解决一个问题的重点,在这个问题上,我放弃寻找现有的解决方案并获得Python-hammer,但是Python的XML支持是众所周知的......好吧......实际上,让我们把它留在“臭名昭着” 。
所以我回来寻找一个预先存在的工具。 我的要求非常简单:
这样的工具存在吗? 我不想安装Visual Studio和朋友(太臃肿,IMO),但我已经安装了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
Modules Debug Zlib
正如13ren所述,libxml的xmllint会报告行号 - 也许您有版本问题。 您可能会发现从http://www.zlatkovic.com/libxml.en.html获取libxml / libxslt工具的本机(非cygwin)版本很有用。
您可能还想看看Sun的 msv。 它不是XSD的完整实现,但可以完成这项工作(我一般用它来进行RelaxNG验证)
我建议使用PowerShell社区扩展的 Windows Powershell 。 PSCX具有Test-Xml cmdlet,其中包含以下Get-Help
详细说明:
测试良构性并可选择验证XML Schema。 它不处理指定targetName空间。 要查看验证错误消息,请指定-Verbose标志。
我不知道它是否报告了亚麻布的错误,但是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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.