Как мне разобрать XML в Python? - PullRequest
878 голосов
/ 16 декабря 2009

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

<foo>
   <bar>
      <type foobar="1"/>
      <type foobar="2"/>
   </bar>
</foo>

Как я могу получить доступ к атрибутам 1 и 2 в XML с помощью Python?

Ответы [ 14 ]

6 голосов
/ 16 декабря 2009

Я считаю Python xml.dom и xml.dom.minidom довольно простым. Имейте в виду, что DOM не подходит для больших объемов XML, но если ваш ввод довольно мал, тогда это будет работать нормально.

5 голосов
/ 20 февраля 2017
import xml.etree.ElementTree as ET
data = '''<foo>
           <bar>
               <type foobar="1"/>
               <type foobar="2"/>
          </bar>
       </foo>'''
tree = ET.fromstring(data)
lst = tree.findall('bar/type')
for item in lst:
    print item.get('foobar')

Будет напечатано значение атрибута foobar.

4 голосов
/ 09 июля 2018

XML

<foo>
   <bar>
      <type foobar="1"/>
      <type foobar="2"/>
   </bar>
</foo>

PYTHON_CODE

import xml.etree.cElementTree as ET

tree = ET.parse("foo.xml")
root = tree.getroot() 
root_tag = root.tag
print(root_tag) 

for form in root.findall("./bar/type"):
    x=(form.attrib)
    z=list(x)
    for i in z:
        print(x[i])

ВЫВОД:

foo
1
2
2 голосов
/ 09 ноября 2018

xml.etree.ElementTree против lxml

Это некоторые плюсы двух наиболее часто используемых библиотек, которые мне было бы полезно узнать, прежде чем выбирать между ними.

xml.etree.ElementTree:

  1. Из стандартной библиотеки : нет необходимости устанавливать какой-либо модуль

LXML

  1. Легко написать XML декларация : например, вам нужно добавить standalone="no"?
  2. Хорошая печать : вы можете получить красивый XML с отступом без дополнительного кода.
  3. Objectify функциональность: позволяет использовать XML, как если бы вы имели дело с обычной иерархией объектов Python .node.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...