0

我已阅读此答案:https ://stackoverflow.com/a/7052168/6557127,但我的 XML 文件有点不同(openHAB REST API):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<items>
 <item>
    <type>GroupItem</type>
    <name>All</name>
    <state>baz</state>
    <link>http://localhost:8080/rest/items/All</link>
 </item>
 <item>
    <type>GroupItem</type>
    <name>foo</name>
    <state>bar</state>
    <link>http://localhost:8080/rest/items/foo</link>
 </item>
</items>

如何在 bash 中获取项目 foo 的状态?

4

1 回答 1

1

使用XMLStarlet

xmlstarlet sel -t -m "//item[name='foo']/state" -v .

...或者,使用 Python 2.7(此处,从 shell 函数调用):

get_state() {
  python -c '
import xml.etree.ElementTree as ET
import sys

doc = ET.parse(sys.stdin)
el = doc.find(".//item[name=\"%s\"]/state" % (sys.argv[1],))
if el is not None:
    print el.text
' "$@"
}

...用作:

foo_state=$(get_state foo <your.xml)

在这两种情况下,我们都在使用真正的 XML 解析器(而不是试图将不理解语法的东西拼凑在一起),并利用 XPath 语言来构建我们的实际查询。

于 2016-08-07T04:11:55.903 回答