52

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

有没有办法用 xmllint 来捕捉它?(我不需要使用 XSD 检查一般的树结构)。

4

4 回答 4

86
xmllint --noout your_test_file.xml

检查此命令的返回码。请参阅文档1遇到基本解析错误时返回的值。例如:

echo $?
于 2012-09-05T08:41:56.030 回答
4
xmllint --valid --encode utf-8 TEST.xml

将在 utf-8 中验证并输出 TEST.xml

cat TEST.xml

<xml 版本="1.0" 编码="utf-8"?>

<!DOCTYPE JM 系统 "mydtd">

<JM> . . . </JM>

于 2014-07-01T12:26:00.180 回答
3

我想将@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 静默退出。

于 2021-02-05T16:35:17.903 回答
2

如果您只需要使用 xmllint 检查任何 xml 文档的有效性(正确性),这里还有另一种方法。

if xmllint --noout /tmp/test.xml > /dev/null 2>&1;
then
    echo "correct"
else
    echo "incorrect"
fi
于 2019-05-04T06:05:30.220 回答