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 の場合 (ここでは、シェル関数から呼び出されます):

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 に答える