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