Python XML-fail – kuidas lugeda, kirjutada ja sõeluda

⚡ Nutikas kokkuvõte

Python XML-töötlus võimaldab teil lugeda, kirjutada ja parsida XML-dokumente sisseehitatud minidomi ja ElementTree moodulite abil. Minidomi klass laadib faili mällu DOM-ina, samas kui ElementTree pakub kiiremat ja... Pythonic puu API.

  • 🔘 Mis on XML: Laiendatav märgistuskeel (eXtensible Markup Language) salvestab ja edastab väikeseid, struktureeritud andmeid.
  • ☑️ minidomi parsimine: Funktsioon parse() laadib XML-faili mällu DOM-ina.
  • Siltide lugemine: getElementsByTagName() tagastab vastavad elemendid; getAttribute() loeb nende väärtused.
  • 🧪 Kirjutamissõlmed: createElement() ja appendChild() lisavad dokumendile uue sildi.
  • 🛠️ ElementTree API: ET.parse() loob puu; getroot() tagastab juurelemendi.
  • 🤖 Tehisintellektiga valmis: Parsitud XML edastab konfiguratsioonid ja API andmed masinõppe torujuhtmetesse.

Python XML-fail

Allolevad jaotised käsitlevad XML-failide parsimist, kirjutamist ja lugemist Python.

Mis on XML?

XML tähistab eXtensible Markup Language. See oli mõeldud väikeste ja keskmiste andmemahtude salvestamiseks ja transportimiseks ning seda kasutatakse laialdaselt struktureeritud teabe jagamiseks.

Python võimaldab teil XML-dokumente parsida ja muuta. XML-dokumendi parsimiseks peab teil kogu XML-dokument mälus olema. Selles õpetuses näeme, kuidas saame XML-i minidom-klassi kasutada Python XML-failide laadimiseks ja sõelumiseks.

XML-i parsimine minidomi abil

Oleme loonud XML-i näidisfaili, mida hakkame sõeluma.

Samm 1) Looge XML-i näidisfail

Faili sees näeme eesnime, perekonnanime, kodu ja asjatundlikkust (SQL, Python, testimine ja äri).

XML-i parsimine minidomi abil

2. samm) Kasutage XML-faili laadimiseks ja sõelumiseks parsimisfunktsiooni

Kui oleme dokumendi parsinud, prindime välja dokumendi juurkataloogi „node name“ ja „firstchild tagname“. Tagname ja nodename on XML-faili standardsed omadused.

Parsi XML-i minidomi abil

  • Impordi moodul xml.dom.minidom ja deklareeri parsitav fail (myxml.xml)
  • See fail sisaldab põhiteavet töötaja kohta, nagu eesnimi, perekonnanimi, kodu, teadmised jne.
  • XML-faili laadimiseks ja sõelumiseks kasutame XML-minidomi parsifunktsiooni
  • Meil on muutuja doc ja doc saab parsimisfunktsiooni tulemuse.
  • Me tahame failist välja printida sõlme nime ja lapse sildi nime, seega deklareerime selle printimisfunktsioonis.
  • Käivitage kood – see prindib XML-failist välja sõlmenime (#document) ja XML-failist esimese alamsildinime (töötaja)

märkusedSõlmenimi ja lapse siltnimi on XML-domeeni standardsed nimed või omadused.

3. samm) Kutsuge XML-dokumendist välja XML-siltide loend ja printige see välja

Järgmisena saame XML-dokumendist välja kutsuda ka XML-siltide loendi ja selle välja printida. Siin printisime välja oskuste komplekti, näiteks SQL-i, Python, Testimine ja äri.

Parsi XML-i minidomi abil

  • Deklareerime muutuja ekspertiis, millest me välja tuletametrackõik töötaja eksperditeadmiste nimed
  • Kasutage standardset funktsiooni dom "getElementsByTagName"
  • See annab kõik elemendid nimega oskus
  • Kuuluta iga oskussildi kohal tsükkel
  • Käivita kood – see annab sulle nimekirja neljast oskusest

Kuidas kirjutada XML-sõlme

Saame luua uue atribuudi funktsiooni "createElement" abil ja seejärel lisada selle uue atribuudi või sildi olemasolevatele XML-siltidele. Lisasime oma XML-faili uue sildi "BigData".

  1. Uue atribuudi (BigData) lisamiseks olemasolevale XML-sildile peate kirjutama koodi.
  2. Seejärel peate XML-sildi välja printima, lisades olemasolevale XML-sildile uue atribuudi.

Kirjutage XML-sõlm

  • Uue XML-sildi lisamiseks ja dokumendile lisamiseks kasutame koodi „doc.createElement”.
  • See kood loob meie uue atribuudi „BigData” jaoks uue oskuste sildi.
  • Lisa see oskusmärgis dokumendi esimesse alamobjekti (töötaja)
  • Käivita kood – uus silt „BigData” ilmub koos teiste ekspertiiside loendiga.

XML-parseri näide

Python 2 Näide

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 Näide

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-i parsimine ElementTree abil

ElementTree on XML-i manipuleerimise API. ElementTree on lihtne viis XML-failide töötlemiseks.

Näidisandmetena kasutame järgmist XML-dokumenti:

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

XML-i lugemine ElementTree abil:

Esmalt peame importima mooduli xml.etree.ElementTree.

import xml.etree.ElementTree as ET

Nüüd toome juurelemendi:

root = tree.getroot()

Järgnev on täielik kood ülaltoodud XML-andmete lugemiseks:

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)

Väljund:

Expertise Data:
SQL
Python

KKK

DOM-navigatsiooni vajavate väikeste failide jaoks kasutage minidomi. Enamiku tööde jaoks valige ElementTree – see on kiirem, kergem ja soovitatavam. Pythonic vaikeväärtus.

Mähi juur ElementTree'sse ja kutsu välja tree.write(“out.xml”, encoding=”utf-8″, xml_declaration=True). Taande jaoks kasuta ET.indent() funktsiooni Python 3.9+ või lxml-i pretty_print.

lxml on kolmanda osapoole teek, mis jagab ElementTree API-t, kuid mida toetab kiire C-kood. See lisab XPathi, XSLT ja valideerimise. Paigaldamiseks kasutage käsku pip install lxml.

Standardsed parserid on haavatavad XXE ja billion-laughs rünnakute suhtes. Paigalda defusedxml ja impordi defusedxml.ElementTree – see on asendusfail, mis keelab ohtlikud välised üksused.

Jah. Kasutage minidom.parseString(text) või ElementTree'i ET.fromstring(text), mis tagastab otse juurväärtuse. Mõlemad parsivad XML-i muutujast, seega pole vastuseid vaja eelnevalt salvestada.

Kõndige ElementTree abil puus, luues iga elemendi sildi, atribuutide ja teksti põhjal sõnastiku. xmltodicti teek automatiseerib teisendamise xmltodict.parse() abil.

XML salvestab konfiguratsioone, annotatsioone ja API vastuseid, mis toidavad mudeleid. Pascali VOC-i pildisildid saadetakse XML-ina; näiteks ElementTreetrackasutab nende piiravaid kaste treenimiseks.

Jah. GitHub Copilot täidab automaatselt minidomi ja ElementTree mustreid, näiteks parse() ja findall() tsükleid. Kontrollib endiselt siltide nimesid ja kodeeringuid ning lisab ebausaldusväärse sisendi jaoks defusedxml-i.

Võta see postitus kokku järgmiselt: