#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"]