xmllint输出的XPath结果以明确的定界符分隔

编程语言 2026-07-09

我在使用XmlLint的命令行工具时遇到了一个问题。某些XPath结果包含换行符,因此输出无法被需要结果之间有清晰分隔的脚本解析。我在寻找一个与GNU的 grepsed 相似的 -z,但没有运气。如何让XmlLint返回具有明确分隔的XPath结果?如果XmlLint无法做到这一点,那么还能用什么工具?

哦,它还应该能处理HTML。

下面是一个示例文件:

<?xml version="1.0" encoding="UTF-8"?>
<root>
<p>Hello,
world!</p>
<i>Hey</i>
<p>Bye.</p>
</root>

//p 的搜索输出如下:

<p>Hello,
world!</p>
<p>Bye.</p>

正如你所见,使用标准的Linux/Unix shell脚本无法区分这些结果。

解决方案

xmllint 无法可靠地在XPath结果之间添加分隔符,因为它使用XPath 1.0,不能支持像 string-join() 这样的函数,或对节点集进行迭代以实现自定义格式。一个更好的方法是使用 xmlstarlet,它允许对输出格式进行显式控制。

示例:

xmlstarlet sel -t -m "//p" -v . -o "||" input.xml

这将输出:

Hello, world!||Bye.||

如果你更喜欢以换行分隔的结果:

xmlstarlet sel -t -m "//p" -v . -n input.xml
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章