xml - 使用 XPath string() 从 bash 脚本中的 XML 获取属性值
问题描述
序言:
这不是重复的,因为所有其他主题都没有回答我的具体问题。
我在 Xubuntu 18.04 上
使用 libxml-xpath-perl 1.42(如果重要的话)
问题:
我有一个 XML,可以这样说:
<root>
<level1>
<somechild foo="bar" />
</level1>
</root
我想bar
从somechild
s 属性中获取值foo
。但是,当我查询
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
给了我
查询未返回节点集。值:条
仍然不是我想要的,但至少没有错误,并且值被识别为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
输出:
酒吧
推荐阅读
- javascript - Hexo 站点生成器 - 使用 PHP 页面的模板
- android - 应用程序无法将音频连接到耳机 Sinch App to App (Android)
- java - 我如何在java中对这个自定义arraylist进行排序,按包装箱数的降序排列
- r - 当尝试在对象列表中保存 R 对象时,R 表示找不到对象
- performance - 为什么我们可以处理父异常时使用多个捕获
- c++ - 有人可以解释在c++中通过指针传递和通过引用传递的目的是什么吗?
- sql - 需要一个 sql 来获取单次预订中支付最高金额的游客
- android - 来自模块的注释依赖不起作用
- reactjs - 如何更改数组中对象中的数组?
- c# - 如何将json对象反序列化为c#