В предыдущей статье как сгенерировать 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
'''