Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Синтаксический разбор XML. Элементы XML есть списки Python. Атрибуты XML есть словари Python




Синтаксический разбор XML

В Python документы XML могут быть обработаны c использованием разных библиотек. Язык имеет обычные синтаксические анализаторы DOM и SAX, но я буду использовать другую библиотеку ElementTree.

> > > import xml. etree. ElementTree as etree ① > > > tree = etree. parse('examples/feed. xml') ② > > > root = tree. getroot()               ③ > > > root                                ④ < Element {http: //www. w3. org/2005/Atom}feed at cd1eb0>

① Модуль ElementTree входит в стандартную библиотеку Python, путь для импорта xml. etree. ElementTree.

② Функция parse() — это базовая функция модуля ElementTree. Функция принимает имя файла или файлоподобный объект. Эта функция выполняет синтаксическй анализ документа за раз. Если разрабатываемая программа должна экономить память, то можно анализировать XML документ частями.

③ Функция parse() возращает объект, который является представлением всего документа. Однако объект tree не является корневым элементом. Чтобы получить ссылку на корневой элемент, необходимо вызвать метод getroot().

④ Как и следовало ожидать, корневой элемент есть элемент фида в пространстве имён http: //www. w3. org/2005/Atom. Строковое представление объекта root ещё раз подчёркивает важный момент: XML элемент — это комбинация пространства имён и его имени-тега (так же называемого локальным именем). Каждый элемент в данном документе находится в пространстве Atom, поэтому корневой элемент представлен как {http: //www. w3. org/2005/Atom}feed.

Модуль ElementTree всегда представляет элементы XML как '{пространство имён}локальное имя'. Вам неоднократно предстоит использовать этот формат при использовании API ElementTree.

 

Элементы XML есть списки Python

В API ElementTree элементы представляются встроенным типом Python - списком. Каждый из элементов списка представляет собой дочерние XML элементы.

# продолжение предыдущего примера> > > root. tag                   ① '{http: //www. w3. org/2005/Atom}feed'> > > len(root)                  ② 8> > > for child in root:          ③... print(child)               ④... < Element {http: //www. w3. org/2005/Atom}title at e2b5d0> < Element {http: //www. w3. org/2005/Atom}subtitle at e2b4e0> < Element {http: //www. w3. org/2005/Atom}id at e2b6c0> < Element {http: //www. w3. org/2005/Atom}updated at e2b6f0> < Element {http: //www. w3. org/2005/Atom}link at e2b4b0> < Element {http: //www. w3. org/2005/Atom}entry at e2b720> < Element {http: //www. w3. org/2005/Atom}entry at e2b510> < Element {http: //www. w3. org/2005/Atom}entry at e2b750>

① Продолжим предыдущий пример: корневой элемент root - {http: //www. w3. org/2005/Atom}feed

② " Длина" корневого элемента есть количество дочерних элементов root.

③ Вы можете использовать элемент как итератор по всем дочерним элементам.

④ Из сообщений видно, что в элементе root 8 дочерних элементов: 5 элементов с метаинформацией о фиде (title, subtitle, id, updated и link) и 3 элемента со статьями entry.

Вы, должно быть, уже догадались, но я хочу явно указать на следующее: список дочерних элементов содержит только прямые дочерние элементы. В свою очередь каждый дочерний элемент entry может содержать свои дочерние элементы, но они не будут включены в список. Они будут включены в список элемента entry, а не в список подэлементов элемента feed. Найти определённые элементы любого уровня вложенности можно несколькими способами; ниже мы рассмотрим 2 из них.

Атрибуты XML есть словари Python

Напомним, что документ XML это не только набор элементов; каждый элемент так же имеет набор атрибутов. Имея конкретный XML элемент, Вы можете легко получить его атрибуты как словарь Python.

# продолжение предыдущего примера> > > root. attrib                      ① {'{http: //www. w3. org/XML/1998/namespace}lang': 'en'}> > > root[4]                          ② < Element {http: //www. w3. org/2005/Atom}link at e181b0> > > > root[4]. attrib                        ③ {'href': 'http: //diveintomark. org/', 'type': 'text/html', 'rel': 'alternate'}> > > root[3]                          ④ < Element {http: //www. w3. org/2005/Atom}updated at e2b4e0> > > > root[3]. attrib                   ⑤ {}

① Свойство attrib возращает словарь атрибутов элемента. Исходная разметка XML была следующая < feed xmlns='http: //www. w3. org/2005/Atom' xml: lang='en'>. Префикс xml: ссылается на стандартное пространство имён, которое любой XML документ может использовать без объявления.

② Пятый подэлемент есть элемент link (используется индекс [4], так как списки Python индексируются начиная с 0).

③ Подэлемент link имеет три атрибута href, type и rel.

④ Четвёртый подэлемент (с индексом [3] в списке начинающемся с 0) — это элемент updated.

⑤ Подэлемент updated не имеет атрибутов, следовательно свойство. attrib возращает пустой словарь.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...