Работа с текстовым форматом XML в языке Python

ElementTree

Пример XML-файла:


В составе стандартной библиотеки языка Python есть библиотека ElementTree.

from xml.etree import ElementTree

tree = ElementTree.parse("example.xml")
root = tree.getroot()
# use root = ElementTree.fromstring(string_xml_data) to parse from str

print(root)
print(root.tag, root.attrib)

Перебор детей:

for child in root:
    print(child.tag, child.attrib)

Также можно использовать индексацию через числа чтобы обращаться к детям и к их детям:

print(root[0][0].text)

Все элементы нашего дерева будут иметь один класс Element.

Поиск и перебор всех элементов в поддереве:

for element in root.iter("scores"):
    print(element)

for element in root.iter("scores"):
    score_sum = 0
    for child in element:
        score_sum += float(child.text)
    print(score_sum)

С помощью метода .findall можно вести перебор только среди детей.

Запись в файле:

from xml.etree import ElementTree

tree = ElementTree.parse("example.xml")
root = tree.getroot()

tree.write("example_copy.xml")

Изменение атрибутов и текстового содержимого:

from xml.etree import ElementTree

tree = ElementTree.parse("example.xml")
root = tree.getroot()

greg = root[0]
module1 = next(greg.iter("module1"))
print(module1, module1.text)
module1.text = str(float(module1.text) + 30)

certificate = greg[2]
certificate.set("type", "with distinction")

tree.write("example_modified.xml")

Создание и удаление элементов:

from xml.etree import ElementTree

tree = ElementTree.parse("example.xml")
root = tree.getroot()

greg = root[0]

description = ElementTree.Element("description")
description.text = "Showed excellent skills during the course"
greg.append(description)

description = greg.find("description")
greg.remove(description)

tree.write("example_modified.xml")

Создание дерева с самого начала:


Через конструктор SubElement можно указать чьим ребенком является элемент.

lxml

Для работы с реальными плохо сформированными HTML файлами используются библиотеки lxml и BeautifulSoup.

Пример разбора страницы:


1 комментарий:

  1. Наконец-то понял, еще есть такой вариант https://pythononline.ru/question/kak-generirovat-xml-s-pomoschyu-python

    ОтветитьУдалить