Модель DOM синтаксического анализа XML является, пожалуй, наиболее простой для понимания — мы просто выполняем обход дерева объектов, полученного в результате анализа, — но она может оказаться менее эффективной при анализе больших документов, когда документ анализируется заранее и целиком сохраняется в памяти. Кроме того, модель DOM поддерживает произвольный доступ к частям документов, вложенные циклы по известным структурам и рекурсивный обход произвольно вложенных фрагментов, тогда как модель SAX ограничивается линейной процедурой анализа. В примере 19.11 приводится сценарий, реализующий анализ на основе модели DOM, эквивалентный реализации парсера SAX из предыдущего раздела.
Пример 19.11. PP4E\Lang\Xml\dombook.py
Анализ XML: модель DOM позволяет получить представление всего документа
в виде объекта, доступного приложению для обхода
import pprint import xml.dom.minidom from xml.dom.minidom import Node
doc = xml.dom.minidom.parse("books.xml") # загрузить документ в объект # для предварительного анализа mapping = {}
for node in doc.getElementsByTagName("book"): # обход объекта DOM
isbn = node.getAttribute("isbn") # с применением DOM API
L = node.getElementsByTagName("title") for node2 in L:
title = "" for node3 in node2.childNodes:
if node3.nodeType == Node.TEXT_NODE: title += node3.data
mapping[isbn] = title
# словарь mapping теперь содержит те же значения, что и в примере
# использования SAX
Этот сценарий выводит те же результаты, которые были получены при использовании парсера SAX. Однако здесь они были получены в результате обхода объекта дерева документа после завершения анализа и за счет вызова методов и обращения к атрибутам, определяемых спецификациями стандарта DOM. В этом заключается одновременно и достоинство, и недостаток модели DOM — его прикладной интерфейс не зависит от конкретного языка программирования, но он может показаться неинтуитивным и слишком многословным некоторым программистам на Python, приученным к более простым моделям:
C:\…\PP4E\Lang\Xml> python dombook.py
‘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