Python XML fájl – Olvasás, írás és elemzés

⚡ Okos összefoglaló

Python Az XML-feldolgozás lehetővé teszi XML dokumentumok olvasását, írását és elemzését a beépített minidom és ElementTree modulok segítségével. A minidom osztály DOM-ként tölti be a fájlt a memóriába, míg az ElementTree gyorsabb és hatékonyabb megoldást kínál. Pythonic fa API.

  • 🔘 Mi az XML: Az eXtensible Markup Language (bővíthető jelölőnyelv) kis méretű, strukturált adatokat tárol és szállít.
  • ☑️ minidom elemzés: A parse() függvény egy XML fájlt tölt be a memóriába DOM-ként.
  • Címkék olvasása: A getElementsByTagName() függvény egyező elemeket ad vissza; a getAttribute() függvény pedig beolvassa az értéküket.
  • 🧪 Csomópontok írása: A createElement() és az appendChild() metódusok új címkéket adnak hozzá a dokumentumhoz.
  • 🇧🇷 ElementTree API: Az ET.parse() egy fát épít; a getroot() pedig a gyökérelemet adja vissza.
  • 🤖 AI-ra kész: Az elemzett XML konfigurációkat és API-adatokat továbbít a gépi tanulási folyamatokba.

Python XML fájl

Az alábbi szakaszok az XML fájlok elemzését, írását és olvasását tárgyalják. Python.

Mi az XML?

Az XML az eXtensible Markup Language rövidítése. Kis és közepes mennyiségű adat tárolására és szállítására tervezték, és széles körben használják strukturált információk megosztására.

Python lehetővé teszi XML dokumentumok elemzését és módosítását. Egy XML dokumentum elemzéséhez a teljes XML dokumentumnak a memóriában kell lennie. Ebben az oktatóanyagban megnézzük, hogyan használhatjuk az XML minidom osztályt a Python XML fájlok betöltéséhez és elemzéséhez.

XML elemzése minidom segítségével

Létrehoztunk egy minta XML fájlt, amelyet elemezni fogunk.

1. lépés) Hozzon létre minta XML-fájlt

A fájlon belül láthatjuk a keresztnevet, a vezetéknevet, az otthont és a szakterületet (SQL, Python, Tesztelés és Üzlet).

XML elemzése minidom segítségével

2. lépés) Használja az elemzés funkciót az XML fájl betöltéséhez és elemzéséhez

Miután elemeztük a dokumentumot, kinyomtatjuk a dokumentum gyökerének „csomópontnevét” és az „első gyermekcímkenevét”. A címkenév és a csomópontnév az XML fájl standard tulajdonságai.

Az XML elemzése minidom segítségével

  • Importáld az xml.dom.minidom modult, és deklaráld a analizálandó fájlt (myxml.xml)
  • Ez a fájl néhány alapvető információt tartalmaz egy alkalmazottról, például keresztnév, vezetéknév, otthon, szakértelem stb.
  • Az XML minidom elemző funkcióját használjuk az XML fájl betöltésére és elemzésére
  • Van egy doc változónk, és a doc visszaadja a parse függvény eredményét.
  • Ki akarjuk nyomtatni a fájlban található csomópontnevet és gyermek tagnevet, ezért deklaráljuk a print függvényben.
  • Futtassa a kódot – Kiírja a csomópontnevet (#document) az XML fájlból és az első gyermek címkenevet (alkalmazott) az XML fájlból

MegjegyzésekA csomópontnév és a gyermek tagnév egy XML dom szabványos nevei vagy tulajdonságai.

3. lépés) Hívja meg az XML dokumentumból az XML-címkék listáját, és nyomtassa ki.

Ezután meghívhatjuk az XML dokumentum XML-címkéinek listáját is, és kinyomtathatjuk. Itt kinyomtattuk az olyan készségek halmazát, mint az SQL, Python, Tesztelés és Üzleti.

Az XML elemzése minidom segítségével

  • Deklaráljuk a szakértelem változót, amelyből kiindulva kiindulunktracaz alkalmazott összes szakértelmének neve
  • Használja a „getElementsByTagName” nevű szabványos dom függvényt
  • Ez megkapja az összes skill nevű elemet
  • Deklarálj egy ciklust az egyes képességcímkék felett
  • Futtasd a kódot - Négy készség listáját fogja megadni

Hogyan írjunk XML csomópontot

Létrehozhatunk egy új attribútumot a „createElement” függvénnyel, majd ezt az új attribútumot vagy címkét hozzáfűzhetjük a meglévő XML címkékhez. Új „BigData” címkét adtunk az XML-fájlunkhoz.

  1. Kódot kell írnod ​​az új attribútum (BigData) hozzáadásához a meglévő XML címkéhez.
  2. Ezután ki kell nyomtatnia az XML címkét úgy, hogy az új attribútum hozzá van fűzve a meglévő XML címkéhez.

XML Node írása

  • Egy új XML-címke hozzáadásához és a dokumentumhoz való hozzáadásához a „doc.createElement” kódot használjuk.
  • Ez a kód egy új készségcímkét hoz létre az új „BigData” attribútumunkhoz.
  • Adja hozzá ezt a készségcímkét a dokumentum első gyermekéhez (alkalmazott)
  • Futtasd a kódot – az új „BigData” címke megjelenik a többi szakértelem listájával.

XML-elemző példa

Python 2 Példa

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 Példa

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 elemzése az ElementTree segítségével

Az ElementTree egy API XML manipulálására. Az ElementTree egy egyszerű módja az XML fájlok feldolgozásának.

Mintaadatként a következő XML dokumentumot használjuk:

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

XML olvasása az ElementTree segítségével:

Először importálnunk kell az xml.etree.ElementTree modult.

import xml.etree.ElementTree as ET

Most pedig keressük meg a gyökérelemet:

root = tree.getroot()

A fenti XML adatok beolvasásához a következő teljes kódot láthatjuk:

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)

output:

Expertise Data:
SQL
Python

GYIK

Használj minidomot kis fájlokhoz, amelyek DOM navigációt igényelnek. Válaszd az ElementTree-t a legtöbb munkához – gyorsabb, könnyebb és az ajánlott, többlet. Pythonic alapértelmezett.

Csomagold be a gyökeret egy ElementTree-be, és hívd meg a tree.write(“out.xml”, encoding=”utf-8″, xml_declaration=True) függvényt. A behúzáshoz használd az ET.indent() függvényt. Python 3.9+, vagy az lxml pretty_print függvénye.

Az lxml egy harmadik féltől származó függvénykönyvtár, amely az ElementTree API-t használja, de gyors C kóddal van támogatva. XPath, XSLT és validáció funkciókat tartalmaz. Telepítés: pip install lxml.

A szabványos elemzők sebezhetőek az XXE és a billion-laughs támadásokkal szemben. Telepítsd a defusedxml-t, és importáld a defusedxml.ElementTree fájlt – ez egy beépített helyettesítő, amely letiltja a veszélyes külső entitásokat.

Igen. Használd a minidom.parseString(text) vagy az ElementTree ET.fromstring(text) függvényét, amely közvetlenül a gyökeret adja vissza. Mindkettő egy változóból elemzi az XML-t, így a válaszokat nem kell előbb menteni.

Sétálj végig a fán az ElementTree segítségével, és építs fel egy szótárat az egyes elemek címkéiből, attribútumaiból és szövegéből. Az xmltodict könyvtár automatizálja a konverziót az xmltodict.parse() függvényen keresztül.

Az XML konfigurációkat, annotációkat és API-válaszokat tárol, amelyek a modelleket táplálják. A Pascal VOC képcímkék XML-ként kerülnek kiszállításra; ElementTree pl.traca határoló dobozaikat a betanításhoz.

Igen. A GitHub Copilot automatikusan kiegészíti a minidom és az ElementTree mintákat, például a parse() és a findall() ciklusokat. Továbbra is ellenőrzi a tagek nevét és kódolását, és hozzáadja a defusedxml-t a nem megbízható bemenetekhez.

Foglald össze ezt a bejegyzést a következőképpen: