我遇到了一些 XML 打印文件的问题,其中源系统忽略了将某些字符转换为其 XML 语法等效项(例如 & 未转换为&
)。
有没有办法用 xmllint 来捕捉它?(我不需要使用 XSD 检查一般的树结构)。
我遇到了一些 XML 打印文件的问题,其中源系统忽略了将某些字符转换为其 XML 语法等效项(例如 & 未转换为&
)。
有没有办法用 xmllint 来捕捉它?(我不需要使用 XSD 检查一般的树结构)。
xmllint --valid --encode utf-8 TEST.xml
将在 utf-8 中验证并输出 TEST.xml
cat TEST.xml
<xml 版本="1.0" 编码="utf-8"?>
<!DOCTYPE JM 系统 "mydtd">
<JM> . . . </JM>
我想将@nathan-basanese 的评论升级为对 OP 问题的实际最佳答案:
// , 检查返回码的简单方法如下
$ xmllint --noout your_test_file.xml; echo $?
:– Nathan Basanese 2015 年 11 月 19 日 0:38
默认情况下 xmllint “检查以确定文档是否格式正确”。因此,xmllint --noout --nonet goodfoo.xml
对于格式正确的 XML,退出代码为 0 将完全保持沉默,同时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 静默退出。
如果您只需要使用 xmllint 检查任何 xml 文档的有效性(正确性),这里还有另一种方法。
if xmllint --noout /tmp/test.xml > /dev/null 2>&1;
then
echo "correct"
else
echo "incorrect"
fi