gpt4 book ai didi

windows - 适用于 Windows 的命令行 XML 验证器

转载 作者:可可西里 更新时间:2023-11-01 12:25:20 26 4
gpt4 key购买 nike

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

当我没有通过 Google 找到任何明确的赢家时,我在这里四处寻找并找到了 similar question ,但没有一个建议的工具完全符合我的需要:

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

(*我正在验证的架构使用了替换组——不恰当,但它在项目外部,所以我无法更改它——这导致 xmlstarlet 即使在有效文件上也会阻塞。 )

通常,在解决问题时我会放弃寻找现有的解决方案并使用 Python-hammer,但众所周知,Python 的 XML 支持......好吧......实际上,让我们把它留在“臭名昭著”。

所以我又开始寻找一个已有的工具。我的要求很简单:

  • 在 Win32(特别是 Windows XP SP3)上运行
  • 命令行;我的编辑器几乎可以处理 stdin/-out/-err、参数、临时文件等的任意组合。
  • 相当完整的 XSD 支持(特别是 namespace 和替换组)
  • 报告发生错误的行号!

有这样的工具吗?我宁愿不必安装 Visual Studio 和 friend (太臃肿,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

关于windows - 适用于 Windows 的命令行 XML 验证器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1172662/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com