Сохранение данных Python - анализаторы XML

XML - это аббревиатура от eXtensible Markup Language. Это переносимый кроссплатформенный язык с открытым исходным кодом, очень похожий на HTML или SGML и рекомендованный консорциумом World Wide Web.

Это хорошо известный формат обмена данными, используемый большим количеством приложений, таких как веб-службы, офисные инструменты и Service Oriented Architectures(SOA). Формат XML является как машиночитаемым, так и читаемым человеком.

Пакет xml стандартной библиотеки Python состоит из следующих модулей для обработки XML:

Sr.No. Модули и описание
1

xml.etree.ElementTree

API ElementTree, простой и легкий XML-процессор

2

xml.dom

определение DOM API

3

xml.dom.minidom

минимальная реализация DOM

4

xml.sax

Реализация интерфейса SAX2

5

xml.parsers.expat

привязка парсера Expat

Данные в XML-документе организованы в древовидном иерархическом формате, начиная с корня и элементов. Каждый элемент представляет собой отдельный узел в дереве и имеет атрибут, заключенный в теги <> и </>. Каждому элементу может быть назначен один или несколько подэлементов.

Ниже приведен типичный пример XML-документа -

<?xml version = "1.0" encoding = "iso-8859-1"?>
<studentlist>
   <student>
      <name>Ratna</name>
      <subject>Physics</subject>
      <marks>85</marks>
   </student>
   <student>
      <name>Kiran</name>
      <subject>Maths</subject>
      <marks>100</marks>
   </student>
   <student>
      <name>Mohit</name>
      <subject>Biology</subject>
      <marks>92</marks>
   </student>
</studentlist>

При использовании ElementTreeмодуль, первый шаг - настроить корневой элемент дерева. Каждый элемент имеет тег и атрибут, который является объектом dict. Для корневого элемента атрибутом является пустой словарь.

import xml.etree.ElementTree as xmlobj
root=xmlobj.Element('studentList')

Теперь мы можем добавить один или несколько элементов в корневой элемент. Каждый объект-элемент может иметьSubElements. У каждого подэлемента есть атрибут и свойство текста.

student=xmlobj.Element('student')
   nm=xmlobj.SubElement(student, 'name')
   nm.text='name'
   subject=xmlobj.SubElement(student, 'subject')
   nm.text='Ratna'
   subject.text='Physics'
   marks=xmlobj.SubElement(student, 'marks')
   marks.text='85'

Этот новый элемент добавляется к корню с помощью метода append ().

root.append(student)

Добавьте столько элементов, сколько хотите, используя вышеуказанный метод. Наконец, объект корневого элемента записывается в файл.

tree = xmlobj.ElementTree(root)
   file = open('studentlist.xml','wb')
   tree.write(file)
   file.close()

Теперь мы видим, как разбирать XML-файл. Для этого постройте дерево документа, указав его имя в качестве параметра файла в конструкторе ElementTree.

tree = xmlobj.ElementTree(file='studentlist.xml')

Объект дерева имеет getroot() для получения корневого элемента, а getchildren () возвращает список элементов под ним.

root = tree.getroot()
children = root.getchildren()

Объект словаря, соответствующий каждому подэлементу, создается путем перебора коллекции подэлементов каждого дочернего узла.

for child in children:
   student={}
   pairs = child.getchildren()
   for pair in pairs:
      product[pair.tag]=pair.text

Затем каждый словарь добавляется к списку, возвращающему исходный список объектов словаря.

SAX- это стандартный интерфейс для анализа XML, управляемого событиями. Для синтаксического анализа XML с помощью SAX требуется ContentHandler путем создания подкласса xml.sax.ContentHandler. Вы регистрируете обратные вызовы для интересующих событий, а затем позволяете синтаксическому анализатору пройти через документ.

SAX полезен, когда ваши документы большие или у вас есть ограничения памяти, поскольку он анализирует файл при чтении его с диска, в результате чего весь файл никогда не сохраняется в памяти.

Объектная модель документа

(DOM) API - это рекомендация консорциума World Wide Web. В этом случае весь файл считывается в память и сохраняется в иерархической (древовидной) форме для представления всех функций XML-документа.

SAX, не такой быстрый, как DOM, с большими файлами. С другой стороны, DOM может уничтожить ресурсы, если используется для множества небольших файлов. SAX доступен только для чтения, в то время как DOM позволяет вносить изменения в XML-файл.