首页 文章

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

提问于
浏览
1

前言:
这不是重复,因为所有其他主题都不能回答我的具体问题 .
我在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 给了我

查询未返回节点集 . Value :吧

仍然不是我想要的,但至少没有错误, Value 被认为是 bar

我该如何正确使用?

1 回答

  • 1

    使用有效的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
    

相关问题