我一直发现对模式的验证对于thinkos来说是一个非常有价值的区域,并且希望将验证检查作为项目的一部分,我经常需要手写
XML文件长达几百行.我的文本编辑器有一个相当不错的CLI集成功能,所以我正在寻找一个命令行验证器.
当我没有通过Google找到任何明确的获奖者时,我在这里捅了一个similar question,但没有一个建议的工具非常适合我的需求:
> libxml(通过cygwin) – 不报告行号;我不知道我的错误在哪里!
> msxml – 无法从命令行运行?
> xerces-c – 似乎需要Visual C的副本?
> xerces2-j – 无法从命令行运行?
> xmlstarlet – XSD支持不足*
(*我验证的模式使用替代组 – 不适当地,但它在项目外部,所以我无法更改它 – 这会导致xmlstarlet甚至阻止有效的文件.)
通常,这是解决一个问题的重点,我将放弃寻找一个现有的解决方案,并达到Python锤子,但Python的XML支持是众所周知的……实际上,让我们把它放在“臭名昭着” .
所以我回来寻找一个预先存在的工具.我的要求很简单:
>在Win32(Windows XP SP3,具体)上运行
>命令行;我的编辑器可以使用stdin / -out / -err,参数,临时文件等的任何组合.
>合理完成XSD支持(特别是命名空间和替换组)
>报告发生错误的行号!
这样的工具是否存在?我宁愿不必安装Visual Studio和朋友(太blo肿,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>”),但是这似乎不会影响你的任务.
EDIT添加“编译”部分版本:
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