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

use*_*603 9 xml bash sh xmllint

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

我有一个文件经常被破坏,需要更换,而我花时间调查潜在的问题.

有什么简单的方法用sh或bash执行这个任务吗?

谢谢!

san*_*uel 17

不直接与bash,但xmllint相当广泛.

xmllint --format "${xmlfile}"
Run Code Online (Sandbox Code Playgroud)

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

  • 这实际上就是我几年前停止使用zsh的原因-每当我为POSIX-superset shell编写代码时,就会导致太多错误。 (2认同)

Cha*_*ffy 5

XMLStarlet有一个验证子命令。最简单的方法是检查格式是否正确:

xmlstarlet val "$filename"
Run Code Online (Sandbox Code Playgroud)

要根据 DTD 进行验证:

xmlstarlet val -d "$dtd_filename" "$xml_filename"
Run Code Online (Sandbox Code Playgroud)

要针对 XSD 架构进行验证:

xmlstarlet val -s "$xsd_filename" "$xml_filename"
Run Code Online (Sandbox Code Playgroud)

要针对 RelaxNG 架构进行验证:

xmlstarlet val -r "$rng_filename" "$xml_filename"
Run Code Online (Sandbox Code Playgroud)

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


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


kes*_*lam -2

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

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