【发布时间】:2012-07-22 07:21:22
【问题描述】:
我遇到了一些 XML 打印文件的问题,其中源系统忽略了将某些字符转换为其 XML 语法等效项(例如,& 未转换为 &)。
有没有办法用 xmllint 来捕捉它? (我不需要使用 XSD 检查一般的树结构)。
【问题讨论】:
标签: xml
我遇到了一些 XML 打印文件的问题,其中源系统忽略了将某些字符转换为其 XML 语法等效项(例如,& 未转换为 &)。
有没有办法用 xmllint 来捕捉它? (我不需要使用 XSD 检查一般的树结构)。
【问题讨论】:
标签: xml
【讨论】:
--valid 标志?
$ xmllint --noout your_test_file.xml; echo $?.
xmllint --noout *.xml && echo ok || echo problem
xmllint --valid --encode utf-8 TEST.xml
将验证并输出 utf-8 格式的 TEST.xml
cat TEST.xml
【讨论】:
--valid吗?
如果您只需要使用 xmllint 检查任何 xml 文档的有效性(正确性),这里还有一种方法。
if xmllint --noout /tmp/test.xml > /dev/null 2>&1;
then
echo "correct"
else
echo "incorrect"
fi
【讨论】:
我想将@nathan-basanese 的评论升级为对 OP 问题的实际最佳答案:
// ,检查返回码的简单方法如下:
$ xmllint --noout your_test_file.xml; echo $?。 – Nathan Basanese 2015 年 11 月 19 日 0:38
默认情况下 xmllint “检查以确定文档是否格式正确”。因此,xmllint --noout --nonet goodfoo.xml 将完全保持沉默,退出代码为 0 用于格式正确的 XML,而 xmllint --noout --nonet badfoo.xml 将为每个错误发出一条错误消息,并根据具体错误发出一个介于 1 和 9 之间的退出代码。
--nonet 选项告诉 xmllint 不 获取 DTD,因为听起来 OP 只是想扫描 XML 格式正确。
这就是我认为她正在寻找的东西:
xmllint --noout --nonet /path/to/xmlfiles/*.xml 2>&1
如果有任何错误,这将生成所有错误的 grep-able 列表和 1 到 9 之间的退出代码。
如果任何扫描文件中没有错误,它将以退出代码 0 静默退出。
【讨论】: