разработчики стараются придерживаться единогоAPI,который продиктован стандартом 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

разработчики стараются придерживаться единогоAPI,который продиктован стандартом

Поиск

Анализ XML-документа

 

Для работы с готовымXML-документом нужно воспользоватьсяXML-анализаторами.АнализXML-документа с порождением объекта класса Document происходит всего в одной строчке, с помощью функции parse().Здесь стоит заметить,что кроме стандартного пакета xml


 


можно поставить пакет PyXML или альтернативные коммерческие пакеты.Тем не менее,

 

разработчики стараются придерживаться единогоAPI,который продиктован стандартом

 

DOM Level 2:

 

import xml.dom.minidom

 

dom = xml.dom.minidom.parse("expression.xml")

 

dom.normalize()

 

def output_tree(node, level=0):

 

if node.nodeType == node.TEXT_NODE: if node.nodeValue.strip():

 

print ". "*level, node.nodeValue.strip() else: # ELEMENT_NODE или DOCUMENT_NODE

 

atts = node.attributes or {} att_string = ", ".join(

 

["%s=%s " % (k, v) for k, v in atts.items()]) print ". "*level, node.nodeName, att_string

 

for child in node.childNodes: output_tree(child, level+1)

 

output_tree(dom)

 

В этом примере дерево выводится с помощью определенной функции output_tree(),которая принимает на входе узел и вызывается рекурсивно для всех вложенных узлов.

В результате получается примерно следующее:

 

#document

 

. expression

. . operation type=+

 

. . . operand

 

. . . . 2

. . . operand

. . . . operation type=*

. . . . . operand

 

. . . . . . 3

 

. . . . . operand

. . . . . . 4

 

Здесь же применяется метод normalize() для того,чтобы все текстовые фрагменты были слиты воедино(в противном случае может следовать подряд несколько узлов с текстом).

 

Можно заметить,что даже в небольшом примере использовались атрибуты узлов:node.nodeType указывает тип узла,node.nodeValue применяется для доступа к данным,

 

node.nodeName дает имя узла(соответствует названию тега),node.attributes дает доступ к атрибутам узла.node.childNodes применяется для доступа к дочерним узлам.Этих свойств достаточно,чтобы рекурсивно обойти дерево.

 

Все узлы являются экземплярами подклассов класса Node.Они могут быть следующих типов:

 



Поделиться:


Последнее изменение этой страницы: 2024-06-27; просмотров: 53; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.146 (0.005 с.)