Сохранение данных 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-файл.