我总是发现针对模式的验证是针对thinkos的一个非常宝贵的保护措施,我希望将验证检查作为一个项目的一部分,在这个项目中,我经常需要手工编写几百行长的XML文件。我的文本编辑器有一个相当不错的CLI集成功能,所以我正在寻找一个命令行验证程序
当我没有通过谷歌找到任何明确的赢家时,我在这里摸索,发现了一个类似的问题,但没有一个工具能完全满足我的需要:
- libxml(通过cygwin)-不报告行号;我不知道我的错误在哪里
- msxml-无法从命令行运行
- xerces-c-似乎需要Visual c的副本
- xerces2-j-无法从命令行运行
- xmlstarlet-XSD支持不足*
(*我正在验证的模式使用了替换组,这是不恰当的,但它是项目外部的,因此我无法更改它,这会导致xmlstarlet即使在有效文件上也会阻塞。)
通常,这是解决问题的关键所在,在这个问题上,我会放弃寻找现有的解决方案,转而使用Python锤子,但Python的XML支持是出了名的……好吧……实际上,让我们把它放在“臭名昭著”的位置
因此,我又回到寻找一个预先存在的工具。我的要求很简单:
- 在Win32上运行(特别是Windows XP SP3)
- 命令行;我的编辑器可以处理几乎任意组合的stdin/-out/-err、参数、临时文件等
- 合理完整的XSD支持(特别是名称空间和替换组)
- 报告发生错误的行号
有这样的工具吗?我不希望必须安装VisualStudio和friends(在我看来太臃肿了),但我已经安装了Cygwin和Python
您的第一个选项xmllint(libxml2)确实为xml(以及xsd)中的错误提供了行号。您可能只需要更新版本。我刚刚用我的复印件确认了这两种情况,即:
>;xmllint—版本
xmllint:使用libxml版本20627
示例输出:
invalidXml.xml:4:元素c:架构有效性错误:元素“c”:不需要此元素。预期为(b)。
invalidXml.xml无法验证
<;?xml version=“1.0”?>;
<;无效xmleg>;
<;a/>;
<;!--&书信电报;b></b>--&燃气轮机;
<;c/>;
</无效xmleg>;
其中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>;”),但这似乎不会影响您的任务
编辑在版本中添加“使用”部分:
编译时使用:线程树输出推送读取器
模式编写器SAXv1 FTP HTTP DTDValid HTML旧版
C14N目录XPath XPointer XInclude Iconv ISO8859X
Unicode正则表达式自动机表达式模式Schematron
模块调试Zlib