用于Windows的命令行XML验证程序

我总是发现针对模式的验证是针对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&gt&lt/b&gt--&燃气轮机;
<c/>
&lt/无效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”/>
&lt/xs:sequence>
&lt/xs:complexType>
&lt/xs:element>
&lt/xs:schema>

注意:我注意到xmllint将接受它不应该接受的元素名称(例如“<invalidXml.xsd>”),但这似乎不会影响您的任务

编辑在版本中添加“使用”部分:

编译时使用:线程树输出推送读取器
模式编写器SAXv1 FTP HTTP DTDValid HTML旧版
C14N目录XPath XPointer XInclude Iconv ISO8859X
Unicode正则表达式自动机表达式模式Schematron
模块调试Zlib

发表评论