xmllint输出的XPath结果以明确的定界符分隔
我在使用XmlLint的命令行工具时遇到了一个问题。某些XPath结果包含换行符,因此输出无法被需要结果之间有清晰分隔的脚本解析。我在寻找一个与GNU的 grep 和 sed 相似的 -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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。