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-документ у пам'яті. У цьому посібнику ми побачимо, як можна використовувати клас XML minidom у Python для завантаження та аналізу файлів XML.

Як розібрати XML за допомогою minidom

Ми створили зразок файлу XML, який збираємося проаналізувати.

Крок 1) Створіть зразок файлу XML

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

Як розібрати XML за допомогою minidom

Крок 2) Використовуйте функцію аналізу, щоб завантажити та проаналізувати файл XML

Після аналізу документа ми виведемо «ім'я вузла» кореневого каталогу документа та «тег firstchild». Тег та ім'я вузла – це стандартні властивості XML-файлу.

Синтаксичний аналіз XML за допомогою minidom

  • Імпортуйте модуль xml.dom.minidom та оголосіть файл, який потрібно проаналізувати (myxml.xml)
  • Цей файл містить деяку основну інформацію про працівника, як-от ім’я, прізвище, місце проживання, досвід тощо.
  • Ми використовуємо функцію синтаксичного аналізу в мінідомі XML для завантаження та аналізу файлу XML
  • У нас є змінна doc, і doc отримує результат функції parse
  • Ми хочемо вивести назву вузла та назву дочірнього тега з файлу, тому ми оголошуємо їх у функції print.
  • Запустіть код. Він друкує ім’я вузла (#document) із XML-файлу та перший дочірній тег (співробітник) із XML-файлу

Примітка:Ім'я вузла та дочірній тег – це стандартні імена або властивості XML-дому.

Крок 3) Виклик списку XML-тегів з XML-документа та його друк

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

Синтаксичний аналіз XML за допомогою minidom

  • Оголосимо змінну expertise, з якої ми збираємося extracвсі назви експертів, які має працівник
  • Використовуйте стандартну функцію dom під назвою “getElementsByTagName”
  • Таким чином ви отримаєте всі елементи під назвою навик
  • Оголосіть цикл для кожного з тегів навичок
  • Запустіть код — він видасть список із чотирьох навичок

Як написати вузол XML

Ми можемо створити новий атрибут за допомогою функції «createElement», а потім додати цей новий атрибут або тег до існуючих тегів XML. Ми додали новий тег «BigData» у наш файл XML.

  1. Вам потрібно написати код, щоб додати новий атрибут (BigData) до існуючого тегу XML
  2. Потім вам потрібно роздрукувати тег XML з новим атрибутом, доданим до існуючого тегу XML

Напишіть вузол XML

  • Щоб додати новий XML-тег та додати його до документа, ми використовуємо код “doc.createElement”
  • Цей код створить новий тег навичок для нашого нового атрибута «BigData»
  • Додайте цей тег навички до першого дочірнього елемента документа (співробітник)
  • Запустіть код — з’явиться новий тег «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

Поширені запитання

Використовуйте minidom для невеликих файлів, що потребують навігації DOM. Для більшості робіт оберіть ElementTree — він швидший, легший та рекомендований. Pythonінтерфейс за замовчуванням.

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

lxml — це стороння бібліотека, яка використовує той самий ElementTree API, але підтримується швидким кодом на C. Вона додає XPath, XSLT та валідацію. Встановлюється через pip install lxml.

Стандартні парсери вразливі до атак XXE та billion-laughs. Встановіть defusedxml та імпортуйте defusedxml.ElementTree — заміну, яка вимикає небезпечні зовнішні об'єкти.

Так. Використовуйте minidom.parseString(text) або ET.fromstring(text) з ElementTree, які повертають корінь безпосередньо. Обидва методи аналізують XML зі змінної, тому відповіді не потрібно попередньо зберігати.

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

XML зберігає конфігурації, анотації та відповіді API, які надають дані моделям. Мітки зображень Pascal VOC постачаються як XML; ElementTree extracвикористовує свої обмежувальні рамки для навчання.

Так. GitHub Copilot автоматично завершує шаблони minidom та ElementTree, такі як цикли parse() та findall(). Все ще перевіряє назви тегів та кодування, а також додає defusedxml для ненадійного вводу.

Підсумуйте цей пост за допомогою: