2015-04-13 11 views
1

Как уже упоминалось, мне нужно получить список тегов XML в файле, используя библиотеку xml.etree.ElementTree.Получение списка тегов XML в файле с помощью xml.etree.ElementTree

Я знаю, что есть свойства и методы, такие как ETVar.child, ETVar.getroot(), ETVar.tag, ETVar.attrib.

Но для того, чтобы использовать их и получить хотя бы название тегов на уровне 2, мне пришлось использовать вложенные.

На данный момент у меня есть что-то вроде

for xmlChild in xmlRootTag: 
     if xmlChild.tag: 
     print(xmlChild.tag) 

цели будет получить список всех, даже глубоко вложенные теги XML в файле, устраняя дубликаты.

Для лучшей идеи, я добавляю возможный пример кода XML:

<root> 
<firstLevel> 
    <secondlevel level="2"> 
    <thirdlevel> 
     <fourth>text</fourth> 
     <fourth2>text</fourth> 
    </thirdlevel> 
    </secondlevel> 
</firstlevel> 
</root> 
+0

Решение Fantastic D работает нормально, но есть закрытие) отсутствует: elemList = list (set (elemList)) Порядок элементов не является ни порядком внешнего вида, ни уровнем, ни буквенным. – Helen

+0

@Helen Благодарим за внимание. Я обновил ответ с вашим предложением. Хорошего дня! – FanaticD

ответ

4

я сделал больше исследований на эту тему и выяснил подходящее решение. Поскольку это может быть обычной задачей, я отвечу на него, поэтому я считаю, что это может помочь другим.

Что я искал, был метод etree iter.

import xml.etree.ElementTree as ET 
# load and parse the file 
xmlTree = ET.parse('myXMLFile.xml') 

elemList = [] 

for elem in xmlTree.iter(): 
    elemList.append(elem.tag) # indent this by tab, not two spaces as I did here 

# now I remove duplicities - by convertion to set and back to list 
elemList = list(set(elemList)) 

# Just printing out the result 
print(elemList) 

Важные замечания

  • xml.etree.ElemTree является стандартной библиотеки Python
  • образец написан для Python v3.2.3
  • механика используется для удаления двуличности основан на преобразовании в set, что позволяет только уникальные значения и затем преобразуется обратно в list.

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

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