【问题标题】:check XML syntax with xmllint使用 xmllint 检查 XML 语法
【发布时间】:2012-07-22 07:21:22
【问题描述】:

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

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

【问题讨论】:

    标签: xml


    【解决方案1】:
    xmllint --noout your_test_file.xml
    

    检查此命令的返回码。见documentation。遇到基本解析错误时,返回1 的值。例如:

    echo $?
    

    【讨论】:

    • 如果您没有 DTD,为什么还要使用 --valid 标志?
    • @YzmirRamirez 谢谢,它不应该在那里。我更正了我的答案。
    • // , 检查返回码的简单方法如下:$ xmllint --noout your_test_file.xml; echo $?.
    • 我用这个命令测试多个文件xmllint --noout *.xml && echo ok || echo problem
    • @YzmirRamirez,因为有一个 TON 的 XML 是由其他人编写的,它没有正式的 DTD,但工作得非常好并且有“不言而喻”的结构。例如,我正在处理一个问题,该问题需要处理来自 FreePBX 模块库的 125 个包含 9855 行的 xml 文件。我想做的第一件事是检查它们是否都是有效格式的 XML。这就是把我带到这里的原因。 :-)
    【解决方案2】:
    xmllint --valid --encode utf-8 TEST.xml
    

    将验证并输出 utf-8 格式的 TEST.xml

    cat TEST.xml
    

    . . .

    【讨论】:

    • // ,你不应该删除--valid吗?
    【解决方案3】:

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

    if xmllint --noout /tmp/test.xml > /dev/null 2>&1;
    then
        echo "correct"
    else
        echo "incorrect"
    fi
    

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2021-06-06
        • 2012-01-06
        • 1970-01-01
        • 2015-07-15
        • 2021-03-04
        • 2022-01-03
        • 2020-10-21
        • 2015-05-18
        • 1970-01-01
        相关资源
        最近更新 更多