Python XML-файл – как читать, писать и анализировать

⚡ Умное резюме

Python Обработка XML позволяет читать, записывать и анализировать XML-документы с помощью встроенных модулей minidom и ElementTree. Класс minidom загружает файл в память в виде DOM, а ElementTree предлагает более быстрый и удобный способ. PythonAPI дерева ic.

  • 🔘 Что такое XML: Расширяемый язык разметки (eXtensible Markup Language) хранит и передает небольшие структурированные данные.
  • ☑️ Анализ минидомов: Функция parse() загружает XML-файл в память в виде DOM-элемента.
  • Теги для чтения: Метод getElementsByTagName() возвращает соответствующие элементы; метод getAttribute() считывает их значения.
  • 🧪 Запись узлов: Методы createElement() и appendChild() добавляют новый тег в документ.
  • 🇧🇷 API ElementTree: Метод ET.parse() строит дерево; метод getroot() возвращает корневой элемент.
  • 🤖 Готовность к ИИ: Разобранный XML-код передает конфигурационные файлы и данные API в конвейеры машинного обучения.

Python XML файл

В разделах ниже рассматриваются вопросы анализа, записи и чтения XML-файлов. Python.

Что такое XML?

XML означает расширяемый язык разметки. Он был разработан для хранения и транспортировки небольших и средних объемов данных и широко используется для обмена структурированной информацией.

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

Как анализировать XML с помощью минидома

Мы создали образец XML-файла, который собираемся проанализировать.

Шаг 1) Создайте образец XML-файла.

Внутри файла мы можем увидеть имя, фамилию, дом и область специализации (SQL, Python(Тестирование и бизнес).

Как анализировать XML с помощью минидома

Шаг 2) Используйте функцию синтаксического анализа для загрузки и анализа XML-файла.

После анализа документа мы выведем «имя узла» корня документа и «имя тега firstchild». Имя тега и имя узла — это стандартные свойства XML-файла.

Разобрать XML с помощью минидома

  • Импортируйте модуль xml.dom.minidom и укажите файл, который необходимо разобрать (myxml.xml).
  • Этот файл содержит некоторую базовую информацию о сотруднике, такую ​​как имя, фамилия, дом, опыт и т. д.
  • Мы используем функцию синтаксического анализа минидома XML для загрузки и анализа XML-файла.
  • У нас есть переменная `doc`, и `doc` получает результат функции `parse`.
  • Мы хотим вывести имя узла и имя дочернего тега из файла, поэтому объявляем их в функции print.
  • Запустите код. Он распечатывает имя узла (#document) из файла XML и имя первого дочернего тега (сотрудник) из файла XML.

Внимание: Имя узла и имя дочернего тега — это стандартные имена или свойства XML-домена.

Шаг 3) Вызовите список XML-тегов из XML-документа и распечатайте его.

Далее мы также можем вызвать список XML-тегов из XML-документа и распечатать его. Здесь мы распечатали набор навыков, таких как SQL, Python, Тестирование и Бизнес.

Разобрать XML с помощью минидома

  • Объявите переменную «экспертиза», из которой мы собираемся извлечьtracвсе названия областей экспертизы, которыми обладает сотрудник.
  • Используйте стандартную функцию dom под названием «getElementsByTagName».
  • Это позволит получить все элементы с именем «skill».
  • Объявите цикл для каждого из тегов навыков.
  • Запустите код — он выдаст список из четырех навыков.

Как написать XML-узел

Мы можем создать новый атрибут с помощью функции createElement, а затем добавить этот новый атрибут или тег к существующим тегам XML. Мы добавили новый тег «BigData» в наш XML-файл.

  1. Вам необходимо написать код для добавления нового атрибута (BigData) к существующему XML-тегу.
  2. Затем необходимо вывести XML-тег с новым атрибутом, добавленным к существующему XML-тегу.

Написать XML-узел

  • Для добавления нового XML-тега в документ используется код «doc.createElement».
  • Этот код создаст новый тег навыка для нашего нового атрибута «Большие данные».
  • Добавьте этот тег навыка в первый дочерний элемент документа (сотрудник).
  • Запустите код — появится новый тег «BigData» вместе с остальным списком экспертных областей.

Пример XML-парсера

Python 2 Пример

import xml.dom.minidom

def main():
# use the parse() function to load and parse an XML file
   doc = xml.dom.minidom.parse("Myxml.xml");
  
# print out the document node and the name of the first child tag
   print doc.nodeName
   print doc.firstChild.tagName
  
# get a list of XML tags from the document and print each one
   expertise = doc.getElementsByTagName("expertise")
   print "%d expertise:" % expertise.length
   for skill in expertise:
     print skill.getAttribute("name")
    
#Write a new XML tag and add it into the document
   newexpertise = doc.createElement("expertise")
   newexpertise.setAttribute("name", "BigData")
   doc.firstChild.appendChild(newexpertise)
   print " "

   expertise = doc.getElementsByTagName("expertise")
   print "%d expertise:" % expertise.length
   for skill in expertise:
     print skill.getAttribute("name")
    
if name == "__main__":
  main();

Python 3 Пример

import xml.dom.minidom

def main():
    # use the parse() function to load and parse an XML file
    doc = xml.dom.minidom.parse("Myxml.xml");

    # print out the document node and the name of the first child tag
    print (doc.nodeName)
    print (doc.firstChild.tagName)
    # get a list of XML tags from the document and print each one
    expertise = doc.getElementsByTagName("expertise")
    print ("%d expertise:" % expertise.length)
    for skill in expertise:
        print (skill.getAttribute("name"))

    # Write a new XML tag and add it into the document
    newexpertise = doc.createElement("expertise")
    newexpertise.setAttribute("name", "BigData")
    doc.firstChild.appendChild(newexpertise)
    print (" ")

    expertise = doc.getElementsByTagName("expertise")
    print ("%d expertise:" % expertise.length)
    for skill in expertise:
        print (skill.getAttribute("name"))

if __name__ == "__main__":
    main();

Как анализировать XML с помощью ElementTree

ElementTree — это API для работы с XML. ElementTree — это простой способ обработки XML-файлов.

В качестве образца данных мы используем следующий XML-документ:

<data>
   <items>
      <item name="expertise1">SQL</item>
      <item name="expertise2">Python</item>
   </items>
</data>

Чтение XML с использованием ElementTree:

Сначала необходимо импортировать модуль xml.etree.ElementTree.

import xml.etree.ElementTree as ET

Теперь давайте получим корневой элемент:

root = tree.getroot()

Ниже приведён полный код для чтения указанных выше XML-данных:

import xml.etree.ElementTree as ET
tree = ET.parse('items.xml')
root = tree.getroot()

# all items data
print('Expertise Data:')

for elem in root:
   for subelem in elem:
      print(subelem.text)

Выход:

Expertise Data:
SQL
Python

Часто задаваемые вопросы (FAQ)

Используйте minidom для небольших файлов, требующих навигации по DOM. Для большинства задач выбирайте ElementTree — он быстрее, легче и является рекомендуемым, более эффективным инструментом. Pythonic default.

Оберните корневой элемент в ElementTree и вызовите tree.write(“out.xml”, encoding=”utf-8″, xml_declaration=True). Для отступов используйте ET.indent(). Python 3.9+ или pretty_print из lxml.

lxml — это сторонняя библиотека, использующая API ElementTree, но основанная на быстром коде на языке C. Она добавляет поддержку XPath, XSLT и валидацию. Установка осуществляется через pip install lxml.

Стандартные парсеры уязвимы для XXE-атак и атак типа "миллиард смехов". Установите defusedxml и импортируйте defusedxml.ElementTree — это замена, которая отключает опасные внешние сущности.

Да. Используйте minidom.parseString(text) или ElementTree's ET.fromstring(text), которые возвращают корневой элемент напрямую. Оба метода анализируют XML из переменной, поэтому предварительное сохранение ответов не требуется.

С помощью ElementTree можно пройтись по дереву, создавая словарь на основе тега, атрибутов и текста каждого элемента. Библиотека xmltodict автоматизирует преобразование с помощью xmltodict.parse().

XML хранит конфигурации, аннотации и ответы API, которые передаются моделям. Метки изображений Pascal VOC поставляются в формате XML; ElementTree, например,tracэто их ограничивающие рамки для обучения.

Да. GitHub Copilot автоматически дополняет шаблоны minidom и ElementTree, как и циклы parse() и findall(). При этом по-прежнему проверяется имя тега и кодировка, а также добавляется defusedxml для ненадежных входных данных.

Подведем итог этой публикации следующим образом: