使用xmllint检查XML语法

时间:2012-07-24 01:47:40

标签: xml

我遇到了一些XML打印文件的问题,其中源系统忽略了将某些字符转换为等效的XML语法(例如&未转换为&)。

有没有办法用xmllint捕获这个? (我不需要使用XSD检查常规树结构。)

4 个答案:

答案 0 :(得分:63)

xmllint --noout your_test_file.xml

检查此命令的返回码。见documentation。满足基本解析错误时返回1的值。 E.g:

echo $?

答案 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