Python XML datoteka – Kako čitati, pisati i analizirati

⚡ Pametni sažetak

Python Obrada XML-a omogućuje vam čitanje, pisanje i parsiranje XML dokumenata pomoću ugrađenih modula minidom i ElementTree. Klasa minidom učitava datoteku u memoriju kao DOM, dok ElementTree nudi brže i... PythonAPI ic stabla.

  • 🔘 Što je XML: eXtensible Markup Language pohranjuje i prenosi male, strukturirane podatke.
  • ☑️ parsiranje minidoma: Funkcija parse() učitava XML datoteku u memoriju kao DOM.
  • Čitanje oznaka: getElementsByTagName() vraća odgovarajuće elemente; getAttribute() čita njihove vrijednosti.
  • 🧪 Čvorovi za pisanje: createElement() i appendChild() dodaju novu oznaku u dokument.
  • 🛠️ ElementTree API: ET.parse() gradi stablo; getroot() vraća korijenski element.
  • 🤖 Spremno za umjetnu inteligenciju: Parsirani XML unosi konfiguracije i API podatke u cjevovode strojnog učenja.

Python XML datoteka

U donjim odjeljcima obrađujemo parsiranje, pisanje i čitanje XML datoteka u Python.

Što je XML?

XML je kratica za eXtensible Markup Language. Dizajniran je za pohranu i prijenos malih do srednjih količina podataka i naširoko se koristi za dijeljenje strukturiranih informacija.

Python omogućuje vam parsiranje i mijenjanje XML dokumenata. Da biste parsirali XML dokument, morate imati cijeli XML dokument u memoriji. U ovom vodiču vidjet ćemo kako možemo koristiti XML minidom klasu u Python za učitavanje i raščlanjivanje XML datoteka.

Kako analizirati XML pomoću minidoma

Napravili smo primjer XML datoteke koju ćemo raščlaniti.

Korak 1) Stvorite oglednu XML datoteku

Unutar datoteke možemo vidjeti ime, prezime, dom i područje stručnosti (SQL, Python, Testiranje i poslovanje).

Kako analizirati XML pomoću minidoma

Korak 2) Koristite funkciju raščlanjivanja za učitavanje i raščlanjivanje XML datoteke

Nakon što smo parsirali dokument, ispisati ćemo "naziv čvora" korijena dokumenta i "oznaku prvog djeteta". Oznaka i naziv čvora su standardna svojstva XML datoteke.

Raščlanite XML pomoću minidoma

  • Uvezite modul xml.dom.minidom i deklarirajte datoteku koju treba parsirati (myxml.xml)
  • Ova datoteka sadrži neke osnovne podatke o zaposleniku kao što su ime, prezime, dom, stručnost itd.
  • Koristimo funkciju raščlanjivanja na XML minidomu za učitavanje i raščlanjivanje XML datoteke
  • Imamo varijablu doc, a doc dobiva rezultat funkcije parsiranja
  • Želimo ispisati naziv čvora i naziv podređenog taga iz datoteke, pa ih deklariramo u funkciji print.
  • Pokrenite kod - ispisuje naziv čvora (#document) iz XML datoteke i prvi podređeni tagname (zaposlenik) iz XML datoteke

bilješkeNaziv čvora i podređeni tagname su standardna imena ili svojstva XML domene.

Korak 3) Pozovite popis XML oznaka iz XML dokumenta i ispišite ga

Zatim možemo pozvati i popis XML oznaka iz XML dokumenta i ispisati ga. Ovdje smo ispisali skup vještina poput SQL-a, Python, Ispitivanje i Posao.

Raščlanite XML pomoću minidoma

  • Deklarirajte varijablu stručnosti, iz koje ćemo izvestitracsva stručna znanja koja zaposlenik ima
  • Koristite dom standardnu ​​funkciju pod nazivom "getElementsByTagName"
  • Time ćete dobiti sve elemente pod nazivom skill
  • Deklariraj petlju preko svake od oznaka vještina
  • Pokrenite kod - dat će vam popis od četiri vještine

Kako napisati XML čvor

Možemo stvoriti novi atribut pomoću funkcije "createElement" i zatim dodati ovaj novi atribut ili oznaku postojećim XML oznakama. Dodali smo novu oznaku "BigData" u našu XML datoteku.

  1. Morate napisati kod za dodavanje novog atributa (BigData) postojećoj XML oznaci
  2. Zatim morate ispisati XML oznaku s novim atributom dodanim postojećoj XML oznaci

Napišite XML čvor

  • Za dodavanje nove XML oznake i njezino dodavanje u dokument koristimo kod „doc.createElement“.
  • Ovaj kod će stvoriti novu oznaku vještine za naš novi atribut „BigData“
  • Dodajte ovu oznaku vještine prvom podređenom elementu dokumenta (zaposlenik)
  • Pokrenite kod - nova oznaka "BigData" pojavit će se s drugim popisom stručnosti

Primjer XML parsera

Python 2 Primjer

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 Primjer

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

Kako analizirati XML pomoću ElementTree

ElementTree je API za manipuliranje XML-om. ElementTree je jednostavan način za obradu XML datoteka.

Kao uzorak podataka koristimo sljedeći XML dokument:

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

Čitanje XML-a pomoću ElementTree:

Prvo moramo uvesti modul xml.etree.ElementTree.

import xml.etree.ElementTree as ET

Sada dohvatimo korijenski element:

root = tree.getroot()

Slijedi cijeli kod za čitanje gore navedenih XML podataka:

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)

Izlaz:

Expertise Data:
SQL
Python

Pitanja i odgovori

Koristite minidom za male datoteke kojima je potrebna DOM navigacija. Za većinu poslova odaberite ElementTree — brži je, lakši i preporučeniji. Pythonic zadano.

Omotajte korijen u ElementTree i pozovite tree.write(“out.xml”, encoding=”utf-8″, xml_declaration=True). Za uvlačenje koristite ET.indent() na Python 3.9+ ili lxml-ov pretty_print.

lxml je biblioteka treće strane koja dijeli ElementTree API, ali je podržana brzim C kodom. Dodaje XPath, XSLT i validaciju. Instalirajte putem pip-a naredbom install lxml.

Standardni parseri su ranjivi na XXE i billion-laughs napade. Instalirajte defusedxml i uvezite defusedxml.ElementTree — zamjenski modul koji onemogućuje opasne vanjske entitete.

Da. Koristite minidom.parseString(text) ili ElementTree-ov ET.fromstring(text), koji izravno vraća korijen. Oba parsiraju XML iz varijable, tako da odgovore nije potrebno prvo spremati.

Prošetajte stablom pomoću ElementTree-a, gradeći rječnik od oznake, atributa i teksta svakog elementa. Biblioteka xmltodict automatizira pretvorbu putem xmltodict.parse().

XML pohranjuje konfiguracije, napomene i API odgovore koji hrane modele. Pascal VOC oznake slika isporučuju se kao XML; ElementTree npr.tracts svoje granične okvire za obuku.

Da. GitHub Copilot automatski dovršava minidom i ElementTree obrasce poput petlji parse() i findall(). I dalje provjerava nazive oznaka i kodiranja te dodaje defusedxml za nepouzdani unos.

Sažmite ovu objavu uz: