序言:
这不是重复的,因为所有其他主题都没有回答我的具体问题。
我使用的是 Xubuntu 18.04
使用 libxml-xpath-perl 1.42(如果重要的话)
问题:
我有一个 XML,可以这么说:
<root>
<level1>
<somechild foo="bar" />
</level1>
</root
我想从 somechild 的属性 foo 获取值 bar。 但是,当我查询时
FOO=$(xpath -e '/root/level1/somechild/@foo' $XMLFILE)"
在我的 bash 脚本中,它返回 foo="bar" 而不是 bar。
我已经研究过这个问题,发现我必须用 string() 做一些事情,但我只是不知道正确的语法是什么。
我已经在不同的地方尝试过 string() 函数,但到目前为止我最接近成功的是
FOO="$(xpath -e 'string(/root/level1/somechild/@foo)' $XMLFILE)"
在这种情况下 echo $FOO 给了我
Query didn't return a nodeset. Value: bar
仍然不是我想要的,但至少没有错误,并且值被识别为 bar
如何正确使用它?
请您参考如下方法:
使用有效的 XML:
xpath -e 'string(//root/level1/somechild/@foo)' file.xml 2>/dev/null
或
xmlstarlet select --text --template --copy-of 'string(//root/level1/somechild/@foo)' file.xml
或
xmlstarlet select --text --template --match '//root/level1/somechild' --value-of '@foo' file.xml
输出:
bar

