Python XML-fil – hvordan man læser, skriver og analyserer

Hvad er XML?

XML står for eXtensible Markup Language. Det er designet til at gemme og transportere små til mellemstore mængder data og er meget brugt til at dele struktureret information.

Python giver dig mulighed for at parse og ændre XML-dokumenter. For at parse XML-dokument skal du have hele XML-dokumentet i hukommelsen. I denne tutorial vil vi se, hvordan vi kan bruge XML minidom-klassen i Python at indlæse og parse XML-filer.

Sådan parses XML ved hjælp af minidom

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

Trin 1) Opret prøve XML-fil

Inde i filen kan vi se fornavn, efternavn, hjem og ekspertiseområdet (SQL, Python, test og forretning)

Sådan parses XML ved hjælp af minidom

Trin 2) Brug parse-funktionen til at indlæse og parse XML-filen

Når vi har parset dokumentet, vil vi udskrive "node navn" af dokumentets rod og "førstebarns tagnavn". Tagnavn og nodenavn er standardegenskaberne for XML-filen.

Parse XML ved hjælp af minidom

  • Importer xml.dom.minidom-modulet og erklær en fil, der skal parses (myxml.xml)
  • Denne fil indeholder nogle grundlæggende oplysninger om en medarbejder som fornavn, efternavn, hjem, ekspertise osv.
  • Vi bruger parse-funktionen på XML-minidom til at indlæse og parse XML-filen
  • Vi har variabel doc og doc får resultatet af parse-funktionen
  • Vi ønsker at udskrive nodenavnet og det underordnede tagnavn fra filen, så vi erklærer det i printfunktionen
  • Kør koden - Den udskriver nodenavnet (#document) fra XML-filen og det første underordnede tagnavn (medarbejder) fra XML-filen

Bemærk:

Nodenavn og underordnet tagnavn er standardnavnene eller egenskaberne for et XML-dom.

Trin 3) Kald listen over XML-tags fra XML-dokumentet og printes ud

Dernæst kan vi også kalde listen over XML-tags fra XML-dokumentet og udskrives. Her udskrev vi sættet af færdigheder som SQL, Python, Test og Business.

Parse XML ved hjælp af minidom

  • Erklær den variable ekspertise, hvorfra vi vil udtrække al den ekspertise, navnet medarbejder har
  • Brug dom standardfunktionen kaldet "getElementsByTagName"
  • Dette vil få alle elementerne kaldet færdighed
  • Erklær loop over hver enkelt af færdighedsmærkerne
  • Kør koden - Det vil give en liste over fire færdigheder

Hvordan man skriver XML Node

Vi kan oprette en ny attribut ved at bruge "createElement"-funktionen og derefter tilføje denne nye attribut eller tag til de eksisterende XML-tags. Vi tilføjede et nyt tag "BigData" i vores XML-fil.

  1. Du skal kode for at tilføje den nye attribut (BigData) til den eksisterende XML-tag
  2. Derefter skal du udskrive XML-tagget med nye attributter tilføjet det eksisterende XML-tag

Skriv XML Node

  • For at tilføje en ny XML og tilføje den til dokumentet, bruger vi koden "doc.create elements"
  • Denne kode vil skabe et nyt færdighedstag til vores nye attribut "Big-data"
  • Tilføj dette færdighedstag til dokumentets første barn (medarbejder)
  • Kør koden - det nye tag "big data" vises sammen med den anden liste 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();

Sådan parses XML ved hjælp af ElementTree

ElementTree er et API til at manipulere XML. ElementTree er den nemme måde at behandle XML-filer på.

Vi bruger følgende XML-dokument som eksempeldata:

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

Læsning af XML ved hjælp af ElementTree:

vi skal først importere xml.etree.ElementTree-modulet.

import xml.etree.ElementTree as ET

Lad os nu hente rodelementet:

root = tree.getroot()

Følgende er den komplette kode til at læse ovenstå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

Resumé

Python giver dig mulighed for at parse hele XML-dokumentet på én gang og ikke kun én linje ad gangen. For at parse XML-dokument skal du have hele dokumentet i hukommelsen.

  • For at parse XML-dokument
  • Importer xml.dom.minidom
  • Brug funktionen "parse" til at parse dokumentet ( doc=xml.dom.minidom.parse (filnavn);
  • Kald listen over XML-tags fra XML-dokumentet ved hjælp af kode (=doc.getElementsByTagName( "navn på xml-tags")
  • For at oprette og tilføje ny attribut i XML-dokument
  • Brug funktionen "createElement"

Opsummer dette indlæg med: