training-web.ruГлавнаяКатегорииО насКарта сайтаПоискТёмная тема

Категории

Как распарсить xml при помощи модуля xml.dom.minidom Python

Создано: 21 сентября 2017Автор: Егор Астапов3995 просмотровСложность: легкий

В предыдущей статье как сгенерировать xml при помощи модуля xml.dom.minidom Python я сгенерировал xml-документ. Теперь решил распарсить этот xml-документ. Нашёл статью Python – Read XML file (DOM Example). Статья довольно простая. В ней показан парсинг xml-документа при помощи модуля minidom. Рассмотрим наш документ product.xml. Тут два блока product в корневом элементе root.


<?xml version="1.0" ?>
<root>
  <name>Production for you</name>
  <product color="white">
    <decr color="green">Text decr 1</decr>
    <text color="white">Text article 1</text>
    <price red="green">100 rub</price>
  </product>
  <product color="white">
    <decr color="green">Text decr 2</decr>
    <text color="white">Text article 2</text>
    <price red="green">200 rub</price>
  </product>
</root>

В нашем примере используется модуль xml.dom.minidom. Получаем название файла doc.getElementsByTagName("name")[0]. Далее находим ветку product с листами: decr, text, price. Цикл for поможет вытащить данные из объекта product (ветка). Далее выводим данные при помощи старого стиля %. Если хотите выводить данные разными способами, то прочитайте статью форматирование строк format Python.


from xml.dom import minidom

doc = minidom.parse("product.xml")

# doc.getElementsByTagName returns NodeList
name = doc.getElementsByTagName("name")[0]
print(name.firstChild.data)

product = doc.getElementsByTagName("product")
for prod in product:
    decr = prod.getElementsByTagName("decr")[0]
    text = prod.getElementsByTagName("text")[0]
    price = prod.getElementsByTagName("price")[0]
    print("описание: %s, текст: %s, цена: %s" % (decr.firstChild.data,\
    text.firstChild.data, price.firstChild.data))
'''
вывод:
Production for you
описание: Text decr 1, текст: Text article 1, цена: 100 rub
описание: Text decr 2, текст: Text article 2, цена: 200 rub
'''

Комментарии

реклама