首页 > 解决方案 > 从没有xpath的xml中提取数据

问题描述

这是我的问题,我在 UNIX 上工作,我有一个包含在字符串foo中的 xml 文件:

echo $foo
<a> <b> <c> bar </c> </b> </a>

我想得到值bar。我可以使用xmllint但我没有--xpath选项。并不是说foo是 UNIX 变量而不是文件。

我发现的唯一解决方案是运行:

echo $foo | xmllint --shell <(cat) <<<'xpath a/b/c/text()'

但它会产生一个非常冗长的输出:

/ > Object is a Node Set :
Set contains 1 nodes:
1  TEXT
    content= bar
/ >

我只想得到“酒吧”。谢谢你的帮助 !

标签: xmlparsingxmllint

解决方案


您可以尝试替换xpathcatxmlshell-command 来调用。这应该输出如下内容:

/ >  -------
 bar

第一行来自 xmlshell 的提示符。要仅获取最后一行,请使用您喜欢的工具仅提取第 2 行,例如:

foo="<a> <b> <c>_ bar _</c> </b> </a>"

echo "cat //c/text()" | xmllint --shell <(echo $foo) | awk 'NR==2'

推荐阅读