使用 XPath string() 从 bash 脚本中的 XML 获取属性值
Getting attribute value from XML in bash script with XPath string()
序言:
这不是重复的,因为所有其他主题都没有回答我的具体问题。
我在 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 脚本中 returns 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
序言:
这不是重复的,因为所有其他主题都没有回答我的具体问题。
我在 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 脚本中 returns 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