Python XML-fil – Hur man läser, skriver och tolkar

⚡ Smart sammanfattning

Python XML-bearbetning låter dig läsa, skriva och analysera XML-dokument med hjälp av de inbyggda modulerna minidom och ElementTree. Klassen minidom laddar en fil i minnet som en DOM, medan ElementTree erbjuder en snabbare och mer Pythonic tree API.

  • 🔘 Vad är XML: eXtensible Markup Language lagrar och transporterar små, strukturerade data.
  • ☑️ minidom-parsning: Funktionen parse() laddar en XML-fil i minnet som en DOM.
  • Läser taggar: getElementsByTagName() returnerar matchande element; getAttribute() läser deras värden.
  • 🧪 Skrivande noder: createElement() och appendChild() lägger till en ny tagg i ett dokument.
  • 🛠️ ElementTree API: ET.parse() bygger ett träd; getroot() returnerar root-elementet.
  • 🤖 AI-redo: Parsad XML matar konfigurationer och API-data till maskininlärningspipelines.

Python XML-fil

Avsnitten nedan behandlar parsning, skrivning och läsning av XML-filer i Python.

Vad är XML?

XML står för eXtensible Markup Language. Den designades för att lagra och transportera små till medelstora mängder data och används ofta för att dela strukturerad information.

Python låter dig analysera och modifiera XML-dokument. För att analysera ett XML-dokument måste du ha hela XML-dokumentet i minnet. I den här handledningen ska vi se hur vi kan använda XML minidom-klassen i Python för att ladda och analysera XML-filer.

Hur man analyserar XML med minidom

Vi har skapat ett exempel på en XML-fil som vi ska analysera.

Steg 1) Skapa exempel på XML-fil

Inuti filen kan vi se förnamn, efternamn, hem och expertområdet (SQL, Python, Testning och affärsverksamhet).

Hur man analyserar XML med minidom

Steg 2) Använd analysfunktionen för att ladda och analysera XML-filen

När vi har analyserat dokumentet skriver vi ut "nodnamnet" för dokumentets rot och "firstchild-tagnamnet". Tagnamn och nodenamn är standardegenskaperna för XML-filen.

Analysera XML med minidom

  • Importera modulen xml.dom.minidom och deklarera filen som ska parsas (myxml.xml)
  • Denna fil innehåller en del grundläggande information om en anställd som förnamn, efternamn, hem, expertis, etc.
  • Vi använder parsefunktionen på XML-minidomen för att ladda och analysera XML-filen
  • Vi har en variabel doc, och doc får resultatet av parsefunktionen
  • Vi vill skriva ut nodnamnet och det underordnade tagnamnet från filen, så vi deklarerar det i utskriftsfunktionen.
  • Kör koden - Den skriver ut nodnamnet (#document) från XML-filen och det första underordnade taggnamnet (anställd) från XML-filen

AnmärkningarNodnamn och underordnat tagnamn är standardnamn eller egenskaper för en XML-dom.

Steg 3) Anropa listan med XML-taggar från XML-dokumentet och skriv ut den

Sedan kan vi också anropa listan med XML-taggar från XML-dokumentet och skriva ut den. Här skrev vi ut uppsättningen färdigheter som SQL, Python, Testning och Business.

Analysera XML med minidom

  • Deklarera variabeln expertis, från vilken vi ska ta utgångspunktentracalla expertisnamn som den anställde har
  • Använd dom standardfunktionen som heter "getElementsByTagName"
  • Detta kommer att få alla element som heter skicklighet
  • Deklarera en loop över var och en av färdighetstaggarna
  • Kör koden – det ger en lista med fyra färdigheter

Hur man skriver XML-nod

Vi kan skapa ett nytt attribut genom att använda funktionen "createElement" och sedan lägga till detta nya attribut eller tag till de befintliga XML-taggarna. Vi har lagt till en ny tagg "BigData" i vår XML-fil.

  1. Du måste skriva kod för att lägga till det nya attributet (BigData) till den befintliga XML-taggen.
  2. Sedan måste du skriva ut XML-taggen med det nya attributet tillagt till den befintliga XML-taggen.

Skriv XML-nod

  • För att lägga till en ny XML-tagg och lägga till den i dokumentet använder vi koden "doc.createElement".
  • Den här koden skapar en ny färdighetstagg för vårt nya attribut "BigData".
  • Lägg till den här färdighetstaggen i dokumentets första underordnade (anställd)
  • Kör koden – den nya taggen ”BigData” kommer att visas med den andra listan över experter

Exempel på XML-tolk

Python 2 Exempel

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 Exempel

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

Hur man analyserar XML med ElementTree

ElementTree är ett API för att manipulera XML. ElementTree är ett enkelt sätt att bearbeta XML-filer.

Vi använder följande XML-dokument som exempeldata:

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

Läser XML med ElementTree:

Vi måste först importera modulen xml.etree.ElementTree.

import xml.etree.ElementTree as ET

Nu ska vi hämta rotelementet:

root = tree.getroot()

Följande är den fullständiga koden för att läsa ovanstående XML-data:

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)

Produktion:

Expertise Data:
SQL
Python

Vanliga frågor

Använd minidom för små filer som behöver DOM-navigering. Välj ElementTree för det mesta arbetet – det är snabbare, lättare och det rekommenderade, mer Pythonic-standard.

Linda roten i ett ElementTree och anropa tree.write("out.xml", encoding="utf-8", xml_declaration=True). För indentering, använd ET.indent() på Python 3.9+, eller lxmls pretty_print.

lxml är ett tredjepartsbibliotek som delar ElementTree API men backas upp av snabb C-kod. Det lägger till XPath, XSLT och validering. Installera via pip install lxml.

Standardparsers är sårbara för XXE- och billion-laughs-attacker. Installera defusedxml och importera defusedxml.ElementTree — en drop-in-ersättning som inaktiverar farliga externa enheter.

Ja. Använd minidom.parseString(text) eller ElementTrees ET.fromstring(text), som returnerar roten direkt. Båda analyserar XML från en variabel, så svar behöver inte sparas först.

Gå igenom trädet med ElementTree och bygg ett dikt från varje elements tagg, attribut och text. Xmltodict-biblioteket automatiserar konvertering via xmltodict.parse().

XML lagrar konfigurationer, annoteringar och API-svar som matar modeller. Pascal VOC-bildetiketter levereras som XML; ElementTree extracderas avgränsande rutor för träning.

Ja. GitHub Copilot autokompletterar minidom- och ElementTree-mönster som parse()- och findall()-loopar. Verifiera fortfarande taggnamn och kodningar och lägg till defusedxml för otillförlitlig inmatning.

Sammanfatta detta inlägg med: