Работа с XML и Python на примерах
XML (eXtensible Markup Language) - это язык разметки для хранения и передачи данных. Python имеет встроенную библиотеку для работы с XML-документами под названием 'xml'.
Для начала работы с XML необходимо импортировать модуль xml.etree.ElementTree:
python
import xml.etree.ElementTree as ET
Создание XML-документа начинается с создания корневого элемента. После этого можно добавлять дочерние элементы, атрибуты и текстовый контент:
python
root = ET.Element("catalog")
book = ET.SubElement(root, "book", attrib={"id": "001"})
title = ET.SubElement(book, "title")
title.text = "The Catcher in the Rye"
author = ET.SubElement(book, "author")
author.text = "J.D. Salinger"
Для создания XML-документа из построенного дерева использовать метод ElementTree:
python
tree = ET.ElementTree(root)
tree.write("catalog.xml")
Чтение XML-документа можно сделать следующим образом:
python
tree = ET.ElementTree(file="catalog.xml")
root = tree.getroot()
for book in root.findall("book"):
title = book.find("title").text
author = book.find("author").text
print(f"{title} by {author}")
С помощью метода 'findall' можно осуществлять поиск всех элементов с заданным тегом, а с помощью метода 'find' - искать первый находящийся элемент.
Также библиотека 'xml' предоставляет возможность парсить XML-документы с помощью SAX-парсера или DOM-парсера. Например, для парсинга XML-документа с помощью SAX-парсера можно воспользоваться следующим кодом:
python
import xml.sax
class BookHandler(xml.sax.ContentHandler):
def __init__(self):
self.current_tag = ""
self.book_count = 0
def startElement(self, tag, attributes):
self.current_tag = tag
if self.current_tag == "book":
self.book_count += 1
print(f"Book {self.book_count}")
def characters(self, content):
if self.current_tag == "title":
print(f"Title: {content}")
elif self.current_tag == "author":
print(f"Author: {content}")
def endElement(self, tag):
self.current_tag = ""
parser = xml.sax.make_parser()
parser.setContentHandler(BookHandler())
parser.parse("catalog.xml")
SAX-парсер читает XML-документ последовательно и вызывает соответствующие методы при обнаружении открывающих и закрывающих тегов и текстового контента.
В целом, библиотека 'xml' в Python предоставляет достаточно гибкие и мощные возможности для работы с XML-документами.