2016-12-22 10 views
1

を使用するxml.etreeキー識別子で要素にアクセスする必要があります。どのように私はid値に応じて要素にアクセスすることができますキー属性で子にアクセスする

<?xml version="1.0" encoding="utf-8" ?> 
<Models> 
    <Model Id="1" Name="booname" Description="boo" Filter="b"> 
     <ModelVariables> 
      <Variable Id="1" Token="tothh" /> 
      <Variable Id="2" Token="avgtt" /> 
     </ModelVariables> 
     <Terms> 
      <Term Id="1" Description="ln1" Coefficient="0.24160834" /> 
      <Term Id="2" Description="ln2" Coefficient="-0.09360441" /> 
     </Terms> 
    </Model> 
    <Model Id="2" Name="fooname" Description="foo" Filter="f"> 
     <Terms> 
      <Term Id="1" Description="e1" Coefficient="0.36310718" /> 
      <Term Id="2" Description="e2" Coefficient="-0.24160834" /> 
     </Terms> 
    </Model> 
</Models> 

例として

はあるだろうか?引数2が渡された場合、モデルfoonameのすべての属性にアクセスする最も直接的な方法は何ですか?

私はfindtextfind、およびgetのメソッドをさまざまな引数で使用しようとしましたが、希望する要素にアクセスできません。

答えて

0

xml.etree.ElementTreesupports a limited XPath language functionalityが、これは属性の特定の値によって要素を取得するのに十分である:

import xml.etree.ElementTree as ET 

data = """<?xml version="1.0" encoding="utf-8" ?> 
<Models> 
    <Model Id="1" Name="booname" Description="boo" Filter="b"> 
     <ModelVariables> 
      <Variable Id="1" Token="tothh" /> 
      <Variable Id="2" Token="avgtt" /> 
     </ModelVariables> 
     <Terms> 
      <Term Id="1" Description="ln1" Coefficient="0.24160834" /> 
      <Term Id="2" Description="ln2" Coefficient="-0.09360441" /> 
     </Terms> 
    </Model> 
    <Model Id="2" Name="fooname" Description="foo" Filter="f"> 
     <Terms> 
      <Term Id="1" Description="e1" Coefficient="0.36310718" /> 
      <Term Id="2" Description="e2" Coefficient="-0.24160834" /> 
     </Terms> 
    </Model> 
</Models>""" 

root = ET.fromstring(data) 

id_value = "2" 
model = root.findall(".//Model[@Id='%s']" % id_value)[0] 
print(model.attrib) 

それは出力します。

{'Id': '2', 'Name': 'fooname', 'Description': 'foo', 'Filter': 'f'} 

は、要素の属性にアクセスするための.attribの使用に注意してください。

関連する問題