Python Plik XML – jak czytać, zapisywać i analizować

⚡ Inteligentne podsumowanie

Python Przetwarzanie XML pozwala odczytywać, zapisywać i analizować dokumenty XML za pomocą wbudowanych modułów minidom i ElementTree. Klasa minidom ładuje plik do pamięci jako DOM, podczas gdy ElementTree oferuje szybsze i bardziej… PythonAPI drzewa ic.

  • 🔘 Czym jest XML: eXtensible Markup Language przechowuje i transportuje niewielkie, ustrukturyzowane dane.
  • analiza minidomu: Funkcja parse() ładuje plik XML do pamięci jako DOM.
  • Czytanie tagów: getElementsByTagName() zwraca pasujące elementy; getAttribute() odczytuje ich wartości.
  • 🧪 Pisanie węzłów: createElement() i appendChild() dodają nowy tag do dokumentu.
  • 🛠️. API ElementTree: ET.parse() buduje drzewo; getroot() zwraca element główny.
  • 🤖 Gotowy na sztuczną inteligencję: Przetworzony kod XML przekazuje konfiguracje i dane API do procesów uczenia maszynowego.

Python Plik XML

Poniższe sekcje obejmują analizę składniową, zapisywanie i odczytywanie plików XML w Python.

Co to jest XML?

XML oznacza eXtensible Markup Language. Został zaprojektowany do przechowywania i transportu małych i średnich ilości danych i jest szeroko stosowany do udostępniania informacji strukturalnych.

Python Umożliwia parsowanie i modyfikowanie dokumentów XML. Aby sparsować dokument XML, musisz mieć cały dokument XML w pamięci. W tym samouczku zobaczymy, jak wykorzystać klasę XML minidom w… Python do ładowania i analizowania plików XML.

Jak analizować XML za pomocą minidom

Stworzyliśmy przykładowy plik XML, który będziemy analizować.

Krok 1) Utwórz przykładowy plik XML

Wewnątrz pliku możemy zobaczyć imię, nazwisko, adres zamieszkania i specjalizację (SQL, Python(Testowanie i Biznes).

Jak analizować XML za pomocą minidom

Krok 2) Użyj funkcji parse, aby załadować i przeanalizować plik XML

Po przeanalizowaniu dokumentu wydrukujemy „nazwę węzła” głównego dokumentu oraz „nazwę znacznika firstchild”. Nazwa znacznika i nazwa węzła to standardowe właściwości pliku XML.

Analizuj XML przy użyciu minidom

  • Zaimportuj moduł xml.dom.minidom i zadeklaruj plik, który ma zostać przeanalizowany (myxml.xml)
  • Plik ten zawiera podstawowe informacje o pracowniku, takie jak imię, nazwisko, adres zamieszkania, wiedza specjalistyczna itp.
  • Używamy funkcji parse w minidomie XML do ładowania i analizowania pliku XML
  • Mamy zmienną doc, a doc pobiera wynik funkcji parsowania
  • Chcemy wydrukować nazwę węzła i nazwę podrzędnego znacznika z pliku, więc deklarujemy je w funkcji drukowania
  • Uruchom kod — wypisuje nazwę węzła (#document) z pliku XML i pierwszą zmienną podrzędną (pracownik) z pliku XML

Note:Nazwa węzła i nazwa znacznika podrzędnego to standardowe nazwy lub właściwości domeny XML.

Krok 3) Wywołaj listę tagów XML z dokumentu XML i wydrukuj ją

Następnie możemy również wywołać listę tagów XML z dokumentu XML i ją wydrukować. W tym przypadku wydrukowaliśmy zestaw umiejętności, takich jak SQL, Python, Testy i biznes.

Analizuj XML przy użyciu minidom

  • Zadeklaruj zmienną wiedzę specjalistyczną, z której będziemy korzystaćtracwszystkie nazwy kompetencji, które posiada pracownik
  • Użyj standardowej funkcji dom o nazwie „getElementsByTagName”
  • Spowoduje to uzyskanie wszystkich elementów o nazwie umiejętności
  • Zadeklaruj pętlę dla każdego z tagów umiejętności
  • Uruchom kod. Wyświetli listę czterech umiejętności

Jak napisać węzeł XML

Możemy utworzyć nowy atrybut za pomocą funkcji „createElement”, a następnie dołączyć ten nowy atrybut lub tag do istniejących tagów XML. Dodaliśmy nowy tag „BigData” w naszym pliku XML.

  1. Musisz napisać kod, aby dodać nowy atrybut (BigData) do istniejącego znacznika XML
  2. Następnie należy wydrukować znacznik XML z nowym atrybutem dodanym do istniejącego znacznika XML

Zapisz węzeł XML

  • Aby dodać nowy znacznik XML i dodać go do dokumentu, używamy kodu „doc.createElement”
  • Ten kod utworzy nowy tag umiejętności dla naszego nowego atrybutu „BigData”
  • Dodaj ten tag umiejętności do pierwszego elementu podrzędnego dokumentu (pracownik)
  • Uruchom kod – nowy tag „BigData” pojawi się wraz z inną listą kompetencji

Przykład analizatora XML

Python 2 Przykład

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 Przykład

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();

Jak analizować XML za pomocą ElementTree

ElementTree to API do manipulowania plikami XML. ElementTree to prosty sposób na przetwarzanie plików XML.

Jako przykładowe dane wykorzystujemy następujący dokument XML:

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

Czytanie XML za pomocą ElementTree:

Najpierw musimy zaimportować moduł xml.etree.ElementTree.

import xml.etree.ElementTree as ET

Teraz pobierzmy element główny:

root = tree.getroot()

Poniżej znajduje się kompletny kod umożliwiający odczytanie powyższych danych 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)

Wyjście:

Expertise Data:
SQL
Python

FAQ

Użyj minidomu do małych plików wymagających nawigacji DOM. Do większości zadań wybierz ElementTree — jest szybszy, lżejszy i zalecany. Pythondomyślne.

Owiń korzeń w ElementTree i wywołaj tree.write(“out.xml”, encoding=”utf-8″, xml_declaration=True). Aby uzyskać wcięcie, użyj ET.indent() na Python 3.9+ lub pretty_print programu lxml.

lxml to zewnętrzna biblioteka współdzieląca API ElementTree, ale oparta na szybkim kodzie C. Dodaje XPath, XSLT i walidację. Instalacja za pomocą pip install lxml.

Standardowe parsery są podatne na ataki XXE i miliard śmiechu. Zainstaluj defusedxml i zaimportuj defusedxml.ElementTree — zamiennik, który wyłącza niebezpieczne encje zewnętrzne.

Tak. Użyj minidom.parseString(text) lub ET.fromstring(text) z ElementTree, która zwraca bezpośrednio element główny. Obie funkcje analizują XML ze zmiennej, więc odpowiedzi nie muszą być najpierw zapisywane.

Przejrzyj drzewo za pomocą ElementTree, budując słownik na podstawie tagu, atrybutów i tekstu każdego elementu. Biblioteka xmltodict automatyzuje konwersję za pomocą xmltodict.parse().

XML przechowuje konfiguracje, adnotacje i odpowiedzi API, które zasilają modele. Etykiety obrazów Pascal VOC są dostarczane w formacie XML; ElementTree extracich pola ograniczające do celów szkoleniowych.

Tak. GitHub Copilot automatycznie uzupełnia wzorce minidom i ElementTree, takie jak pętle parse() i findall(). Nadal weryfikuj nazwy tagów i kodowania oraz dodaj defusedxml dla niezaufanych danych wejściowych.

Podsumuj ten post następująco: