如何验证 xml 文件在 sh 或 bash 中是否有效



如何验证XML文件在sh(最好)或bash中是否有效?

我有一个经常损坏的文件,需要更换,同时我花时间调查潜在的问题。

有没有简单的方法可以用sh或bash执行此任务?

不是直接使用 bash,但xmllint相当广泛。

xmllint --format "${xmlfile}"

如果 XML 文件无效,这将以非零状态退出(提示:$? in bash 会获取最后一个命令的退出代码)。

XMLStarlet 有一个 validate 子命令。最简单的方法是检查格式是否良好:

xmlstarlet val "$filename"

要针对 DTD 进行验证,请执行以下操作:

xmlstarlet val -d "$dtd_filename" "$xml_filename"

要针对 XSD 架构进行验证,请执行以下操作:

xmlstarlet val -s "$xsd_filename" "$xml_filename"

要针对 RelaxNG 架构进行验证,请执行以下操作:

xmlstarlet val -r "$rng_filename" "$xml_filename"

这不是内置在bash中 - bash没有内置的XML解析器,没有一个就无法执行验证 - 但它被广泛用于现代操作系统发行版。


XMLStarlet 还具有用于从 XML 文件中提取信息、编辑 XML 文件等的子命令。如果你打算使用来自shell脚本的XML,建议使用它。

如果要针对 RelaxNG 模式(

W3C XML 模式的替代语法)进行验证,可以使用 Libxml2 (xmllint),但它仅支持 RelaxNG XML 语法。

使用 Libxml2 根据 RelaxNG 模式验证 XML 文件

xmllint --noout --relaxng schema.rng file.xml

可以使用 trang 将 RelaxNG 模式从紧凑语法转换为 XML 语法。但您也可以使用 Jing 来验证 RelaxNG XML 架构。

在计算机上安装 jing 后,您可以根据如下所示的架构schema.relaxng验证文件file.xml

jing schema.rng file.xml

要使用 RelaxNG 压缩语法:

jing -c schema.rnc file.xml

大多数解析器都附带可以从命令行运行的示例程序。运行验证文档的其中一个。

有很多很好的工具。作为一个已经实现了其中几个的人,但比你使用的特定工具更关心语言的人,我拒绝推荐一个而不是另一个。如果你坚持要回答这个问题,那就是"你不能在sh或bash本身这样做......至少除非你是一个受虐狂,试图从头开始写它,然后表现会很糟糕。

相关内容

  • 没有找到相关文章

最新更新