Получить значение вложенного элемента из XML в Python с помощью ElementTree

#python #python-3.x #xml #elementtree

Вопрос:

У меня есть xml такого типа:

 <NAME F_NAME="BOGOTA">
  <SCHOOL NAME="DPS" ADDR="NYC" />
  <MED HOSP="ABC" FAMILY="IND">
    <PATIENT ID="10101022" WARD="10">
      <ADMIT TIME="YYYY-MM-DD HH:MM:SS" DR_NAME="XYZ">
      </ADMIT>
    </PATIENT>
  </MED>
</NAME>
 

Я попытался получить доступ к элементам с помощью приведенного ниже метода:

 >>> import xml.etree.ElementTree as ET
>>> parsed_xml = ET.parse('test.xml')
>>> root = parsed_xml.getroot()
>>> for child in root.iter():
...     print(child.tag, child.attrib)
...
NAME {'F_NAME': 'BOGOTA'}
SCHOOL {'NAME': 'DPS', 'ADDR': 'NYC'}
MED {'HOSP': 'ABC', 'FAMILY': 'IND'}
PATIENT {'ID': '10101022', 'WARD': '10'}
ADMIT {'TIME': 'YYYY-MM-DD HH:MM:SS', 'DR_NAME': 'XYZ'}
 

Но при этом печатаются все значения дочерних тегов и их атрибуты. Как получить имя вложенного тега и его значения? Например, ШКОЛА->НАЗВАНИЕ.

Комментарии:

1. Пример немного сбивает с толку, вы хотите получить name атрибут из school тега?

2. Да, но не делать, если child.tag==»ШКОЛА»: имя = child.attrib

3. как насчет root.findall("SCHOOL[@NAME]")

4. Если вам нужно только название школы, а не весь объект элемента, вы можете сделать school_name = root.find("./SCHOOL").attrib["NAME"]

5. это потому, что вы пытаетесь искать NAME под своим корнем, а это NAME значит, что он ищет NAME/NAME то, чего, очевидно, не существует, не так ли school_name = root.find(".").attrib["F_NAME"]