Четвертый инструмент, популярный пакет ElementTree, входит в состав стандартной библиотеки и позволяет анализировать и генерировать документы XML. Как парсер он по сути является более питониче- ской реализацией модели DOM — он точно так же преобразует документ в дерево объектов, но предоставляет более легковесный прикладной интерфейс навигации по дереву, потому что он разрабатывался специально для языка Python.
Пакет ElementTree предоставляет простые в использовании инструменты синтаксического анализа, изменения и создания документов XML. При анализе и создании документов он представляет их в виде деревьев объектов «элементов». Каждый элемент в дереве имеет имя тега, словарь атрибутов, текстовое значение и последовательность дочерних элементов. Объекты элементов, созданные при анализе, можно просматривать с помощью обычных циклов Python, когда их структура известна, и с помощью приема рекурсивного спуска, когда возможна произвольная вложенность элементов.
Изначально система ElementTree была сторонним расширением, но позднее значительная ее часть была включена в состав стандартной библиотеки Python в виде пакета xml.etree. Пример 19.12 демонстрирует, как можно использовать этот пакет для анализа нашего файла со списком книг.
Пример 19.12. PP4E\Lang\Xml\etreebook.py
Анализ XML: ElementTree (etree) предоставляет API на основе языка Python для анализа/создания документов XML
import pprint
from xml.etree.ElementTree import parse
mapping = {}
tree = parse(‘books.xml’)
for B in tree.findall(‘book’):
isbn = B.attrib[‘isbn’]
for T in B.findall(‘title’):
mapping[isbn] = T.text
pprint.pprint(mapping)
Этот сценарий выводит те же результаты, что и сценарии, использующие парсеры SAX и DOM, но программный код, необходимый для извлечения данных из файла, выглядит на этот раз намного проще:
C:\…\PP4E\Lang\Xml> python etreebook.py
{‘0-596-00128-2’: ‘0-596-00797-3’: ‘0-596-10046-9’: ‘0-596-15806-8’: ‘0-596-15808-4’: ‘0-596-15810-6’: |
‘Python & XML’, ‘Python Cookbook, 2nd Edition’, ‘Python in a Nutshell, 2nd Edition’, ‘Learning Python, 4th Edition’, ‘Python Pocket Reference, 4th Edition’, ‘Programming Python, 4th Edition’} |
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, II том, 2011