Python Файл XML – як читати, писати та аналізувати

Що таке XML?

XML розшифровується як розширювана мова розмітки. Він розроблений для зберігання та транспортування малих і середніх обсягів даних і широко використовується для обміну структурованою інформацією.

Python дозволяє аналізувати та змінювати документи XML. Щоб проаналізувати XML-документ, вам потрібно мати весь XML-документ у пам’яті. У цьому підручнику ми побачимо, як можна використовувати клас minidom XML у 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 отримує результат функції аналізу
  • Ми хочемо надрукувати назву вузла та дочірній тег із файлу, тому ми оголошуємо їх у функції друку
  • Запустіть код. Він друкує ім’я вузла (#document) із XML-файлу та перший дочірній тег (співробітник) із XML-файлу

Примітка::

Ім'я вузла та ім'я дочірнього тегу є стандартними іменами або властивостями XML dom.

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

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

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

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

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

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

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

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

  • Щоб додати новий XML і додати його до документа, ми використовуємо код «doc.create elements»
  • Цей код створить новий тег навичок для нашого нового атрибута «Big-data»
  • Додайте цей тег навичок до першого дочірнього (працівника) документа
  • Запустіть код – новий тег «великі дані» з’явиться разом із іншим списком знань

Приклад аналізатора 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

Підсумки

Python дозволяє аналізувати весь XML-документ за один раз, а не лише один рядок за раз. Щоб проаналізувати XML-документ, вам потрібно мати весь документ у пам’яті.

  • Для аналізу XML-документа
  • Імпортувати xml.dom.minidom
  • Використовуйте функцію «parse» для аналізу документа ( doc=xml.dom.minidom.parse (назва файлу);
  • Викличте список XML-тегів із XML-документа за допомогою коду (=doc.getElementsByTagName( «назва xml-тегів»)
  • Щоб створити та додати новий атрибут у XML-документ
  • Використовуйте функцію «createElement»