2016-08-07 6 views
0

複数の同じラベルでバッシュでXMLファイルを解析する: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の? XMLStarlet

+0

BTW - ドキュメントのヘッダーに 'xmlns ='宣言があれば、それはセマンティクスを変更します。それらを必ず含めてください。 –

答えて

1

foo_state=$(get_state foo <your.xml) 
:として使用

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 
' "[email protected]" 
} 

...:

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

...または、Pythonの2.7(ここでは、シェル関数から呼び出される)と


いずれの場合でも、私たちはusinです実際のXMLパーサー(実際にはが構文を理解していないものを一緒にハックしようとするのではなく)、実際のクエリを構築するためにXPath言語を活用します。

+0

ウェブページをダウンロードせずに直接使用できますか?私はたくさんの書き込みを欲しがっていません。 – Motte001

+0

'foo_state = $(curl http:// ... | get_state foo)' –

+0

あなたはおそらくshmfsを持っているべきです)ファイルシステムを '/ tmp'のために使用しています。 –

関連する問題