在没有 xpath 的情况下从 xml 中提取数据

Extract data from xml without xpath

这是我的问题,我在 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
/ >

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

您可以尝试将 xpath 替换为 cat 作为要调用的 xmlshell 命令。 这应该输出如下内容:

/ >  -------
 bar

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

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

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