如何验证XML文件在sh(最好)或bash中是否有效?
我有一个经常被破坏的文件,需要在我花时间调查潜在问题时进行更换。
有没有简单的方法用sh或bash执行此任务?
答案 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本身做到这一点......至少除非你是一个受虐狂的人,试图从头开始写它,并且然后表现会很糟糕。“