繁体   English   中英

Windows的命令行XML验证程序

[英]Command-line XML validator for Windows

我总是发现针对模式的验证是对thinkos的一个无价之宝,并希望将验证检查作为项目的一部分,我经常需要手工编写几百行的XML文件。 我的文本编辑器有一个相当不错的CLI集成功能,所以我正在寻找一个命令行验证器。

当我没有通过谷歌找到任何明确的赢家时,我在这里找到了一个类似的问题 ,但是没有一个工具能够满足我的需求:

  • libxml (通过cygwin) - 不报告行号; 我不知道我的错误在哪里
  • msxml - 无法从命令行运行?
  • xerces-c - 似乎需要Visual C的副本?
  • xerces2-j - 无法从命令行运行?
  • xmlstarlet - XSD支持不足*

(*我正在验证的模式使用替换组 - 不恰当,但它在项目外部,所以我无法更改它 - 这导致xmlstarlet甚至在有效文件上窒息。)

通常情况下,这是解决一个问题的重点,在这个问题上,我放弃寻找现有的解决方案并获得Python-hammer,但是Python的XML支持是众所周知的......好吧......实际上,让我们把它留在“臭名昭着” 。

所以我回来寻找一个预先存在的工具。 我的要求非常简单:

  • 在Win32上运行(特别是Windows XP SP3)
  • 命令行; 我的编辑器可以使用stdin / -out / -err,参数,临时文件等的任何组合。
  • 合理完成XSD支持(特别是命名空间和替换组)
  • 报告错误发生的行号!

这样的工具存在吗? 我不想安装Visual Studio和朋友(太臃肿,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> ”),但这似乎不会影响您的任务。

编辑添加版本的“编译时”部分:

 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 

正如13ren所述,libxml的xmllint会报告行号 - 也许您有版本问题。 您可能会发现从http://www.zlatkovic.com/libxml.en.html获取libxml / libxslt工具的本机(非cygwin)版本很有用

您可能还想看看Sun的 msv。 它不是XSD的完整实现,但可以完成这项工作(我一般用它来进行RelaxNG验证)

我建议使用PowerShell社区扩展的 Windows Powershell PSCX具有Test-Xml cmdlet,其中包含以下Get-Help详细说明:

测试良构性并可选择验证XML Schema。 它不处理指定targetName空间。 要查看验证错误消息,请指定-Verbose标志。

我不知道它是否报告了亚麻布的错误,但是3分4也不错。

您可以尝试使用Visual Studio 2008 Express版本之一。 现在有更好的XML支持,包括验证,当然还有XML Intellisense,XML片段和XML Schema视图。

无法评论,但Igor Zlatkovic的最新版xmllint(20708)Windows端口也提供了行号。

Xerces-J附带了一个示例应用程序jaxp.SourceValidator 您可以将它提供给您的XML文件,它将验证它。

至于Xerces-C,我自己没有使用它,但我知道它不需要所有的Visual C ++,它只需要运行时文件。 这些可以从Microsoft单独下载。 似乎有一个示例应用程序可以满足您的需求 - 请参阅StdInParse

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM