Skip to main content
 首页 » 编程设计

xml之使用 XPath string() 从 bash 脚本中的 XML 获取属性值

2025年05月04日127pengyingh

序言:
这不是重复的,因为所有其他主题都没有回答我的具体问题。
我使用的是 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