用于Windows的命令行XML验证器

前端之家收集整理的这篇文章主要介绍了用于Windows的命令行XML验证器前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我一直发现对模式的验证对于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

猜你在找的Windows相关文章