我总是发现针对模式的验证是对thinkos的一个无价之宝,并希望将验证检查作为项目的一部分,我经常需要手工编写几百行的XML文件。我的文本编辑器有一个相当不错的CLI集成功能,所以我正在寻找一个命令行验证器。
当我没有通过谷歌找到任何明确的赢家时,我在这里找到了similar question,但是没有一个工具可以满足我的需求:
(*我正在验证的模式使用替换组 - 不恰当,但它在项目外部,因此我无法更改它 - 这导致xmlstarlet
甚至在有效文件上窒息。)
通常情况下,这是解决一个问题的重点,在这个问题上,我放弃寻找现有的解决方案并获得Python-hammer,但是Python的XML支持是众所周知的......好吧......实际上,让我们把它放在“臭名昭著”。
所以我回来寻找一个预先存在的工具。我的要求非常简单:
这样的工具是否存在?我不想安装Visual Studio和朋友(太臃肿,IMO),但我已经安装了Cygwin和Python。
答案 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