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

时间:2014-02-28 15:51:21

标签: xml bash sh xmllint

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

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

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

4 个答案:

答案 0 :(得分:13)

不直接使用bash,但xmllint可以广泛使用。

xmllint --format "${xmlfile}"

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

答案 1 :(得分:2)

如果要根据RelaxNG schema(W3C XML架构的替代语法)进行验证,可以使用Libxml2(xmllint),但它仅支持RelaxNG XML语法。

使用Libxml2针对RelaxNG架构验证XML文件

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

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

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

jing schema.rng file.xml

使用RelaxNG紧凑语法:

jing -c schema.rnc file.xml

答案 2 :(得分:1)

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,则建议使用它。

答案 3 :(得分:0)

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

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