2016-12-22 6 views
1

Использование xml.etree Мне нужно получить доступ к элементу по ключевому идентификатору.Доступ к детям по ключевым атрибутам

Имея в качестве примера

<?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?

Я пытался использовать findtext, find и 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 для доступа к атрибутам элемента ,

 Смежные вопросы

  • Нет связанных вопросов^_^