Python XML-tiedosto – Kuinka lukea, kirjoittaa ja jäsentää

⚡ Älykäs yhteenveto

Python XML-käsittelyn avulla voit lukea, kirjoittaa ja jäsentää XML-dokumentteja sisäänrakennettujen minidom- ja ElementTree-moduulien avulla. Minidom-luokka lataa tiedoston muistiin DOM-muodossa, kun taas ElementTree tarjoaa nopeamman ja tehokkaamman tavan käsitellä tiedostoa. Pythonic-puun API.

  • 🔘 Mikä on XML: eXtensible Markup Language tallentaa ja siirtää pieniä, jäsenneltyjä tietoja.
  • ☑️ minidom-jäsennys: parse()-funktio lataa XML-tiedoston muistiin DOM-muodossa.
  • Tunnisteiden lukeminen: getElementsByTagName() palauttaa vastaavat elementit; getAttribute() lukee niiden arvot.
  • 🧪 Kirjoitussolmut: createElement() ja appendChild() lisäävät uuden tagin dokumenttiin.
  • 🛠️ ElementTree-sovellusliittymä: ET.parse() rakentaa puun; getroot() palauttaa juurielementin.
  • 🤖 Tekoälyvalmis: Jäsennetyn XML:n avulla voidaan syöttää konfiguraatiot ja API-tiedot koneoppimisputkiin.

Python XML-tiedosto

Alla olevat osiot käsittelevät XML-tiedostojen jäsentämistä, kirjoittamista ja lukemista Python.

Mikä on XML?

XML tulee sanoista eXtensible Markup Language. Se on suunniteltu tallentamaan ja siirtämään pieniä ja keskisuuria tietomääriä, ja sitä käytetään laajalti strukturoidun tiedon jakamiseen.

Python mahdollistaa XML-dokumenttien jäsentämisen ja muokkaamisen. Jotta voit jäsentää XML-dokumentin, sinulla on oltava koko XML-dokumentti muistissa. Tässä opetusohjelmassa näemme, kuinka voimme käyttää XML-minidom-luokkaa Python ladata ja jäsentää XML-tiedostoja.

XML:n jäsentäminen minidomilla

Olemme luoneet malli-XML-tiedoston, jonka aiomme jäsentää.

Vaihe 1) Luo malli-XML-tiedosto

Tiedoston sisällä näemme etunimen, sukunimen, kodin ja osaamisalueen (SQL, Python, Testaus ja liiketoiminta).

XML:n jäsentäminen minidomilla

Vaihe 2) Käytä jäsennystoimintoa ladataksesi ja jäsentääksesi XML-tiedoston

Kun olemme jäsentäneet dokumentin, tulostamme dokumentin juuren ”node name” -tiedon ja ”firstchild tagname” -tiedon. Tagname ja nodename ovat XML-tiedoston vakio-ominaisuuksia.

Jäsennä XML käyttämällä minidomia

  • Tuo xml.dom.minidom-moduuli ja määritä jäsennettävä tiedosto (myxml.xml)
  • Tämä tiedosto sisältää joitain perustietoja työntekijästä, kuten etunimi, sukunimi, koti, asiantuntemus jne.
  • Käytämme XML-minidomin jäsennystoimintoa XML-tiedoston lataamiseen ja jäsentämiseen
  • Meillä on muuttuja doc, ja doc saa jäsennysfunktion tuloksen
  • Haluamme tulostaa tiedostosta solmun nimen ja lapsen tagin nimen, joten määrittelemme ne tulostusfunktiossa.
  • Suorita koodi - Se tulostaa solmun nimen (#document) XML-tiedostosta ja ensimmäisen alitunnisteen (työntekijä) XML-tiedostosta

HuomautuksiaSolmun nimi ja lapsitunnisteen nimi ovat XML-dom-objektin vakionimiä tai -ominaisuuksia.

Vaihe 3) Kutsu XML-dokumentin XML-tunnisteiden luettelo ja tulosta se

Seuraavaksi voimme myös kutsua XML-dokumentin XML-tagien luettelon ja tulostaa sen. Tässä tulostimme taitojoukon, kuten SQL:n, Python, Testaus ja Business.

Jäsennä XML käyttämällä minidomia

  • Määrittele muuttuja asiantuntemus, josta aiomme johtaatrackaikki työntekijän asiantuntemuksen nimet
  • Käytä dom-standardifunktiota "getElementsByTagName"
  • Tämä saa kaikki elementit nimeltään taito
  • Määritä silmukka jokaisen taitotunnisteen yli
  • Suorita koodi - Se antaa listan neljästä taidosta

Kuinka kirjoittaa XML-solmu

Voimme luoda uuden attribuutin käyttämällä "createElement"-funktiota ja sitten liittää tämän uuden attribuutin tai tagin olemassa oleviin XML-tageihin. Lisäsimme uuden tagin "BigData" XML-tiedostoomme.

  1. Sinun on kirjoitettava koodi lisätäksesi uuden attribuutin (BigData) olemassa olevaan XML-tagiin.
  2. Sitten sinun on tulostettava XML-tagi, johon on lisätty uusi attribuutti olemassa olevaan XML-tagiin.

Kirjoita XML-solmu

  • Uuden XML-tagin lisäämiseen ja sen lisäämiseen dokumenttiin käytämme koodia “doc.createElement”.
  • Tämä koodi luo uuden taitotunnisteen uudelle attribuutillemme ”BigData”.
  • Lisää tämä taitotaso dokumentin ensimmäiseen aliobjektiin (työntekijä)
  • Suorita koodi – uusi tunniste ”BigData” ilmestyy toisen asiantuntemusluettelon kanssa.

Esimerkki XML-parserista

Python 2-esimerkki

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-esimerkki

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:n jäsentäminen ElementTreen avulla

ElementTree on XML:n käsittelyyn tarkoitettu API. ElementTree on helppo tapa käsitellä XML-tiedostoja.

Käytämme esimerkkitietona seuraavaa XML-dokumenttia:

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

XML:n lukeminen ElementTreen avulla:

Meidän on ensin tuotava xml.etree.ElementTree-moduuli.

import xml.etree.ElementTree as ET

Haetaan nyt juurielementti:

root = tree.getroot()

Seuraavassa on täydellinen koodi yllä olevien XML-tietojen lukemiseen:

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)

lähtö:

Expertise Data:
SQL
Python

UKK

Käytä minidom-tiedostoa pienille tiedostoille, jotka vaativat DOM-navigointia. Valitse ElementTree useimpiin töihin – se on nopeampi, kevyempi ja suositeltu, enemmän Pythonic-oletusarvo.

Kääri juuri ElementTree-elementtiin ja kutsu tree.write(“out.xml”, encoding=”utf-8″, xml_declaration=True). Sisennystä varten käytä ET.indent()-funktiota Python 3.9+ tai lxml:n pretty_print.

lxml on kolmannen osapuolen kirjasto, joka jakaa ElementTree-rajapinnan, mutta jota tukee nopea C-koodi. Se lisää XPath:n, XSLT:n ja validoinnin. Asennus tapahtuu komennolla pip install lxml.

Vakiojäsentimet ovat alttiita XXE- ja biljoona-laughs-hyökkäyksille. Asenna defusedxml ja tuo se tuomalla defusedxml.ElementTree — korvaava tiedosto, joka poistaa vaaralliset ulkoiset yksiköt käytöstä.

Kyllä. Käytä minidom.parseString(text)- tai ElementTreen ET.fromstring(text)-funktiota, joka palauttaa suoraan juuren. Molemmat jäsentävät XML:n muuttujasta, joten vastauksia ei tarvitse tallentaa ensin.

Kävele puussa ElementTreen avulla ja rakenna sanakirja jokaisen elementin tagista, attribuuteista ja tekstistä. xmltodict-kirjasto automatisoi muunnoksen xmltodict.parse()-funktion avulla.

XML tallentaa konfiguraatiot, merkinnät ja API-vastaukset, jotka syöttävät malleja. Pascal VOC -kuvatunnisteet toimitetaan XML-muodossa; ElementTree esim.trackäyttää niiden rajaavia laatikoita koulutusta varten.

Kyllä. GitHub Copilot täydentää automaattisesti minidom- ja ElementTree-mallit, kuten parse()- ja findall()-silmukat. Tarkista silti tagien nimet ja koodaukset ja lisää defusedxml-ominaisuuden epäluotettavalle syötteelle.

Tiivistä tämä viesti seuraavasti: