Python Αρχείο XML – Πώς να διαβάζετε, να γράφετε και να αναλύετε

⚡ Έξυπνη Σύνοψη

Python Η επεξεργασία XML σάς επιτρέπει να διαβάζετε, να γράφετε και να αναλύετε έγγραφα XML χρησιμοποιώντας τις ενσωματωμένες ενότητες minidom και ElementTree. Η κλάση minidom φορτώνει ένα αρχείο στη μνήμη ως DOM, ενώ το ElementTree προσφέρει μια ταχύτερη, πιο... PythonAPI δέντρου ic.

  • 🔘 Τι είναι η XML: Η eXtensible Markup Language αποθηκεύει και μεταφέρει μικρά, δομημένα δεδομένα.
  • ☑️ ανάλυση minidom: Η συνάρτηση parse() φορτώνει ένα αρχείο XML στη μνήμη ως DOM.
  • Ανάγνωση ετικετών: Η getElementsByTagName() επιστρέφει στοιχεία που ταιριάζουν. Η getAttribute() διαβάζει τις τιμές τους.
  • 🧪 Κόμβοι εγγραφής: Οι createElement() και appendChild() προσθέτουν μια νέα ετικέτα σε ένα έγγραφο.
  • API ElementTree: Η ET.parse() κατασκευάζει ένα δέντρο· η getroot() επιστρέφει το στοιχείο root.
  • 🤖 Έτοιμο για Τεχνητή Νοημοσύνη: Η αναλυμένη XML τροφοδοτεί διαμορφώσεις και δεδομένα API σε αγωγούς μηχανικής μάθησης.

Python Αρχείο XML

Οι παρακάτω ενότητες καλύπτουν την ανάλυση, τη σύνταξη και την ανάγνωση αρχείων XML σε Python.

Τι είναι το XML;

Το XML σημαίνει επεκτάσιμη γλώσσα σήμανσης. Σχεδιάστηκε για να αποθηκεύει και να μεταφέρει μικρές έως μεσαίες ποσότητες δεδομένων και χρησιμοποιείται ευρέως για την κοινή χρήση δομημένων πληροφοριών.

Python σας επιτρέπει να αναλύετε και να τροποποιείτε έγγραφα XML. Για να αναλύσετε ένα έγγραφο XML, πρέπει να έχετε ολόκληρο το έγγραφο XML στη μνήμη. Σε αυτό το σεμινάριο, θα δούμε πώς μπορούμε να χρησιμοποιήσουμε την κλάση XML minidom στο Python για να φορτώσετε και να αναλύσετε αρχεία XML.

Πώς να αναλύσετε το XML χρησιμοποιώντας το minidom

Έχουμε δημιουργήσει ένα δείγμα αρχείου XML που πρόκειται να αναλύσουμε.

Βήμα 1) Δημιουργήστε δείγμα αρχείου XML

Μέσα στο αρχείο, μπορούμε να δούμε το όνομα, το επώνυμο, το σπίτι και την περιοχή εξειδίκευσης (SQL, Python, Δοκιμές και Επιχειρήσεις).

Πώς να αναλύσετε το XML χρησιμοποιώντας το minidom

Βήμα 2) Χρησιμοποιήστε τη συνάρτηση ανάλυσης για να φορτώσετε και να αναλύσετε το αρχείο XML

Μόλις αναλύσουμε το έγγραφο, θα εκτυπώσουμε το "όνομα κόμβου" της ρίζας του εγγράφου και το "όνομα ετικέτας πρώτου παιδιού". Το όνομα ετικέτας και το όνομα κόμβου είναι οι τυπικές ιδιότητες του αρχείου XML.

Ανάλυση XML χρησιμοποιώντας minidom

  • Εισαγάγετε την ενότητα xml.dom.minidom και δηλώστε το αρχείο που πρέπει να αναλυθεί (myxml.xml)
  • Αυτό το αρχείο περιέχει ορισμένες βασικές πληροφορίες σχετικά με έναν υπάλληλο, όπως όνομα, επώνυμο, σπίτι, εμπειρία κ.λπ.
  • Χρησιμοποιούμε τη συνάρτηση ανάλυσης στο minidom XML για να φορτώσουμε και να αναλύσουμε το αρχείο XML
  • Έχουμε μια μεταβλητή doc, και η doc λαμβάνει το αποτέλεσμα της συνάρτησης parse.
  • Θέλουμε να εκτυπώσουμε το nodename και το child tagname από το αρχείο, γι' αυτό το δηλώνουμε στη συνάρτηση print.
  • Εκτελέστε τον κώδικα- Εκτυπώνει το όνομα κόμβου (#document) από το αρχείο XML και το πρώτο θυγατρικό όνομα ετικέτας (υπάλληλος) από το αρχείο XML

ΣημείωσηΤα nodename και child tagname είναι τα τυπικά ονόματα ή ιδιότητες ενός XML dom.

Βήμα 3) Καλέστε τη λίστα ετικετών XML από το έγγραφο XML και εκτυπώστε την

Στη συνέχεια, μπορούμε επίσης να καλέσουμε τη λίστα ετικετών XML από το έγγραφο XML και να την εκτυπώσουμε. Εδώ εκτυπώσαμε το σύνολο δεξιοτήτων όπως SQL, Python, Δοκιμές και Επιχειρήσεις.

Ανάλυση XML χρησιμοποιώντας minidom

  • Δηλώστε τη μεταβλητή εμπειρογνωμοσύνη, από την οποία θα εξάγουμεtracόλα τα ονόματα εμπειρογνωμοσύνης που έχει ο εργαζόμενος
  • Χρησιμοποιήστε την τυπική συνάρτηση dom που ονομάζεται "getElementsByTagName"
  • Αυτό θα πάρει όλα τα στοιχεία που ονομάζονται δεξιότητα
  • Δηλώστε έναν βρόχο πάνω από κάθε μία από τις ετικέτες δεξιοτήτων
  • Εκτελέστε τον κώδικα - Θα σας δώσει μια λίστα με τέσσερις δεξιότητες

Πώς να γράψετε τον κόμβο XML

Μπορούμε να δημιουργήσουμε ένα νέο χαρακτηριστικό χρησιμοποιώντας τη συνάρτηση «createElement» και στη συνέχεια να προσθέσουμε αυτό το νέο χαρακτηριστικό ή ετικέτα στις υπάρχουσες ετικέτες XML. Προσθέσαμε μια νέα ετικέτα "BigData" στο αρχείο XML μας.

  1. Πρέπει να γράψετε κώδικα για να προσθέσετε το νέο χαρακτηριστικό (BigData) στην υπάρχουσα ετικέτα XML
  2. Στη συνέχεια, πρέπει να εκτυπώσετε την ετικέτα XML με το νέο χαρακτηριστικό προσαρτημένο στην υπάρχουσα ετικέτα XML.

Γράψτε τον κόμβο XML

  • Για να προσθέσουμε μια νέα ετικέτα XML και να την προσθέσουμε στο έγγραφο, χρησιμοποιούμε τον κώδικα "doc.createElement"
  • Αυτός ο κώδικας θα δημιουργήσει μια νέα ετικέτα δεξιότητας για το νέο μας χαρακτηριστικό "BigData"
  • Προσθέστε αυτήν την ετικέτα δεξιότητας στο πρώτο θυγατρικό στοιχείο του εγγράφου (υπάλληλος)
  • Εκτελέστε τον κώδικα - η νέα ετικέτα "BigData" θα εμφανιστεί μαζί με την άλλη λίστα εμπειρογνωμοσύνης

Παράδειγμα ανάλυσης XML

Python 2 Παράδειγμα

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 Παράδειγμα

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 χρησιμοποιώντας το ElementTree

Το ElementTree είναι ένα API για τον χειρισμό XML. Το ElementTree είναι ένας εύκολος τρόπος επεξεργασίας αρχείων XML.

Ως δείγμα δεδομένων χρησιμοποιούμε το ακόλουθο έγγραφο XML:

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

Ανάγνωση XML χρησιμοποιώντας το ElementTree:

Πρέπει πρώτα να εισαγάγουμε τη λειτουργική μονάδα xml.etree.ElementTree.

import xml.etree.ElementTree as ET

Τώρα ας φέρουμε το στοιχείο root:

root = tree.getroot()

Ακολουθεί ο πλήρης κώδικας για την ανάγνωση των παραπάνω δεδομένων XML:

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)

Παραγωγή:

Expertise Data:
SQL
Python

Συχνές Ερωτήσεις

Χρησιμοποιήστε το minidom για μικρά αρχεία που χρειάζονται πλοήγηση DOM. Επιλέξτε το ElementTree για τις περισσότερες εργασίες — είναι πιο γρήγορο, ελαφρύτερο και το συνιστώμενο, πιο... Pythonπροεπιλογή ic.

Τυλίξτε τη ρίζα σε ένα ElementTree και καλέστε tree.write(“out.xml”, encoding=”utf-8″, xml_declaration=True). Για εσοχή, χρησιμοποιήστε το ET.indent() στο Python 3.9+ ή το pretty_print της lxml.

Το lxml είναι μια βιβλιοθήκη τρίτου μέρους που χρησιμοποιεί το API ElementTree, αλλά υποστηρίζεται από γρήγορο κώδικα C. Προσθέτει XPath, XSLT και επικύρωση. Εγκατάσταση μέσω pip install lxml.

Οι τυπικοί αναλυτές είναι ευάλωτοι σε επιθέσεις XXE και billion-laughs. Εγκαταστήστε το defusedexml και εισαγάγετε το defusedexml.ElementTree — μια drop-in αντικατάσταση που απενεργοποιεί επικίνδυνες εξωτερικές οντότητες.

Ναι. Χρησιμοποιήστε το minidom.parseString(text) ή το ET.fromstring(text) του ElementTree, το οποίο επιστρέφει απευθείας τη ρίζα. Και τα δύο αναλύουν XML από μια μεταβλητή, επομένως οι απαντήσεις δεν χρειάζεται να αποθηκευτούν πρώτα.

Περπατήστε στο δέντρο με το ElementTree, δημιουργώντας ένα dict από την ετικέτα, τα χαρακτηριστικά και το κείμενο κάθε στοιχείου. Η βιβλιοθήκη xmltodict αυτοματοποιεί τη μετατροπή μέσω της xmltodict.parse().

Η XML αποθηκεύει διαμορφώσεις, σχολιασμούς και απαντήσεις API που τροφοδοτούν μοντέλα. Οι ετικέτες εικόνας Pascal VOC αποστέλλονται ως XML. ElementTree extracτα κουτιά οριοθέτησής τους για εκπαίδευση.

Ναι. Το GitHub Copilot συμπληρώνει αυτόματα μοτίβα minidom και ElementTree όπως οι βρόχοι parse() και findall(). Εξακολουθεί να επαληθεύει τα ονόματα και τις κωδικοποιήσεις ετικετών και να προσθέτει defusedexml για μη αξιόπιστη είσοδο.

Συνοψίστε αυτήν την ανάρτηση με: