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