Python XML-fil – Hvordan lese, skrive og analysere

⚡ Smart oppsummering

Python XML-behandling lar deg lese, skrive og analysere XML-dokumenter ved hjelp av de innebygde minidom- og ElementTree-modulene. Minidom-klassen laster en fil inn i minnet som en DOM, mens ElementTree tilbyr en raskere og mer effektiv prosessering. Pythonic tree API.

  • 🔘 Hva er XML: eXtensible Markup Language lagrer og transporterer små, strukturerte data.
  • ☑️ minidom-parsing: parse()-funksjonen laster en XML-fil inn i minnet som en DOM.
  • Lesekoder: getElementsByTagName() returnerer samsvarende elementer; getAttribute() leser verdiene deres.
  • 🧪 Skrive noder: createElement() og appendChild() legger til en ny tagg i et dokument.
  • 🛠️ ElementTree API: ET.parse() bygger et tre; getroot() returnerer rotelementet.
  • 🤖 AI-klar: Parset XML mater konfigurasjoner og API-data inn i maskinlæringsrørledninger.

Python XML-fil

Avsnittene nedenfor dekker parsing, skriving og lesing av XML-filer i Python.

Hva er XML?

XML står for eXtensible Markup Language. Den ble designet for å lagre og transportere små til mellomstore mengder data og er mye brukt for å dele strukturert informasjon.

Python lar deg analysere og endre XML-dokumenter. For å analysere et XML-dokument må du ha hele XML-dokumentet i minnet. I denne veiledningen skal vi se hvordan vi kan bruke XML minidom-klassen i Python for å laste og analysere XML-filer.

Hvordan analysere XML ved hjelp av minidom

Vi har laget en eksempel-XML-fil som vi skal analysere.

Trinn 1) Opprett eksempel på XML-fil

Inne i filen kan vi se fornavn, etternavn, hjem og ekspertiseområdet (SQL, Python, Testing og forretningsdrift).

Hvordan analysere XML ved hjelp av minidom

Trinn 2) Bruk parse-funksjonen til å laste og analysere XML-filen

Når vi har analysert dokumentet, skriver vi ut «nodenavnet» til roten av dokumentet og «firstchild tagname». Tagname og nodename er standardegenskapene til XML-filen.

Parse XML ved hjelp av minidom

  • Importer xml.dom.minidom-modulen og deklarer filen som må analyseres (myxml.xml)
  • Denne filen inneholder grunnleggende informasjon om en ansatt som fornavn, etternavn, hjem, ekspertise, etc.
  • Vi bruker parse-funksjonen på XML-minidomen for å laste og analysere XML-filen
  • Vi har en variabel doc, og doc får resultatet av parse-funksjonen.
  • Vi ønsker å skrive ut nodenavnet og det underordnede tagnavnet fra filen, så vi deklarerer det i utskriftsfunksjonen.
  • Kjør koden - Den skriver ut nodenavnet (#document) fra XML-filen og det første underordnede tagnavnet (ansatt) fra XML-filen

MerknaderNodenavn og underordnet tagnavn er standardnavnene eller egenskapene til en XML-dom.

Trinn 3) Hent frem listen over XML-tagger fra XML-dokumentet og skriv den ut

Deretter kan vi også kalle opp listen over XML-tagger fra XML-dokumentet og skrive den ut. Her skrev vi ut settet med ferdigheter som SQL, Python, Testing og Business.

Parse XML ved hjelp av minidom

  • Deklarer variabelen ekspertise, som vi skal bruke til å utledetracalle navnene på ekspertisen den ansatte har
  • Bruk dom standardfunksjonen kalt "getElementsByTagName"
  • Dette vil få alle elementene kalt ferdighet
  • Deklarer en løkke over hver av ferdighetstaggene
  • Kjør koden – den vil gi en liste med fire ferdigheter

Hvordan skrive XML-node

Vi kan opprette et nytt attributt ved å bruke "createElement"-funksjonen og deretter legge til dette nye attributtet eller taggen til de eksisterende XML-taggene. Vi la til en ny tag "BigData" i XML-filen vår.

  1. Du må skrive kode for å legge til det nye attributtet (BigData) i den eksisterende XML-taggen.
  2. Deretter må du skrive ut XML-taggen med det nye attributtet lagt til den eksisterende XML-taggen.

Skriv XML Node

  • For å legge til en ny XML-tag og legge den til dokumentet, bruker vi koden «doc.createElement».
  • Denne koden vil opprette en ny ferdighetstag for vårt nye attributt «BigData».
  • Legg til denne ferdighetstaggen i dokumentets første underordnede (ansatt)
  • Kjør koden – den nye taggen «BigData» vil vises sammen med den andre listen over ekspertise

Eksempel på XML-parser

Python 2 Eksempel

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 Eksempel

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

Hvordan analysere XML ved hjelp av ElementTree

ElementTree er et API for manipulering av XML. ElementTree er en enkel måte å behandle XML-filer på.

Vi bruker følgende XML-dokument som eksempeldata:

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

Lese XML ved hjelp av ElementTree:

Vi må først importere xml.etree.ElementTree-modulen.

import xml.etree.ElementTree as ET

La oss nå hente rotelementet:

root = tree.getroot()

Følgende er den komplette koden for å lese XML-dataene ovenfor:

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)

Utgang:

Expertise Data:
SQL
Python

Spørsmål og svar

Bruk minidom for små filer som trenger DOM-navigasjon. Velg ElementTree for det meste – det er raskere, lettere og anbefalt, mer Pythonic-standard.

Pakk roten inn i et ElementTree og kall tree.write(“out.xml”, encoding=”utf-8″, xml_declaration=True). For innrykk, bruk ET.indent() på Python 3.9+, eller lxmls pretty_print.

lxml er et tredjepartsbibliotek som deler ElementTree API, men støttes av rask C-kode. Det legger til XPath, XSLT og validering. Installer via pip install lxml.

Standardparsere er sårbare for XXE- og billion-laughs-angrep. Installer defusedxml og importer defusedxml.ElementTree – en drop-in-erstatning som deaktiverer farlige eksterne enheter.

Ja. Bruk minidom.parseString(text) eller ElementTree's ET.fromstring(text), som returnerer roten direkte. Begge analyserer XML fra en variabel, så svar trenger ikke å lagres først.

Gå gjennom treet med ElementTree, og bygg et dikt fra hvert elements tagg, attributter og tekst. Xmltodict-biblioteket automatiserer konvertering via xmltodict.parse().

XML lagrer konfigurasjoner, annoteringer og API-svar som mater modeller. Pascal VOC-bildeetiketter sendes som XML; ElementTree f.eks.tracbruker avgrensningsboksene sine for trening.

Ja. GitHub Copilot fullfører minidom- og ElementTree-mønstre automatisk, som parse()- og findall()-løkker. Bekreft fortsatt tagnavn og kodinger, og legg til defusedxml for upålitelig input.

Oppsummer dette innlegget med: