2016-02-03 3 views
2

Начиная здесь:питона/ElementTree XML разбора в массив

<Program> 

    <ManyTag> 
     <InstSpecific Inst="FAMU" PgmHrs="120" LimitedAccess="N"/> 
     <InstSpecific Inst="FAU" PgmHrs="120" LimitedAccess="N"/> 
     <InstSpecific Inst="FIU" PgmHrs="120" LimitedAccess="N"/> 
     <InstSpecific Inst="UCF" PgmHrs="120" LimitedAccess="N"/> 
     <InstSpecific Inst="UF" PgmHrs="120" LimitedAccess="N"/> 
     <InstSpecific Inst="UNF" PgmHrs="120" LimitedAccess="N"/> 
     <InstSpecific Inst="USF" PgmHrs="120" LimitedAccess="N"/> 
     <InstSpecific Inst="UWF" PgmHrs="120" LimitedAccess="N"/> 
     <OtherTags>stuff</OtherTags> 
    <ManyTag> 

<Program> 

Сверху у меня есть вложенная группировка тегов, которые являются уникальными в Attrib, но не в имени тега. Мне нужно сохранить эту группу, но я не могу понять, как добавить атрибут «Inst» в массив, документ или магический контейнер. Перед тем как кто-то начинает hollerin' о код:

tree = etree.parse('some.xml') 
root = tree.getroot() 

inst = [] 


for element in root.iter(): 

    if element.tag == 'InstSpecific': 
     inst.append(element.get('Inst') 

Это короткий, усеченный вариант, но я пробовал много вещей, и я почти ослеп от ярости. Я настолько расстроен, что сделаю это вручную, но это более 20 000 записей для «InstSpecific». Пожалуйста помоги.

ответ

1

Используйте .findall() плавник всех InstSpecific тегов и получить Inst атрибутов из .attrib:

inst = [element.attrib['Inst'] for element in root.findall('InstSpecific')] 

Если вам нужно сгруппировать список Inst значений атрибутов для каждого ManyTag тега:

[element.attrib['Inst'] 
for many_tag in tree.findall('ManyTag') 
for element in many_tag.findall('InstSpecific')] 
+0

да , который действительно работает в получении всего «Inst». То, что я использую выше, также работает. не думаю, что я хорошо объясняю. Вот что я ищу в массиве – TypeSlow

+0

, да, это работает, чтобы получить все «Inst». То, что я использую выше, также работает. не думаю, что я хорошо объясняю. Вот что я ищу в массиве, в общем говоря: array = [[Breed] [Names]]. Это будет выглядеть как array = [[Poodle] [Fluffy, LadyBug, Snickers]] Тег хотел бы Было бы несколько вложенных экземпляров , и я не могу понять, как поместите их в массив, чтобы они были связаны с вложенным кластером . – TypeSlow

+0

@TypeSlow хорошо, спасибо, но каков будет желаемый результат для образца xml, предоставленного в вопросе? – alecxe