Python Soubor XML – Jak číst, zapisovat a analyzovat

⚡ Chytré shrnutí

Python Zpracování XML umožňuje číst, zapisovat a analyzovat dokumenty XML pomocí vestavěných modulů minidom a ElementTree. Třída minidom načítá soubor do paměti jako DOM, zatímco ElementTree nabízí rychlejší a spolehlivější... PythonAPI stromu ic.

  • 🔘 Co je XML: eXtensible Markup Language ukládá a přenáší malá, strukturovaná data.
  • ☑️ analýza minidomu: Funkce parse() načte XML soubor do paměti jako DOM.
  • (Tj. Čtení tagů: Funkce getElementsByTagName() vrací odpovídající prvky; funkce getAttribute() čte jejich hodnoty.
  • 🧪 Uzly pro psaní: Funkce createElement() a appendChild() přidají do dokumentu nový tag.
  • 🛠️ API ElementTree: ET.parse() vytvoří strom; getroot() vrátí kořenový element.
  • 🤖 Připraveno pro umělou inteligenci: Analyzovaný XML vkládá konfigurační soubory a data API do kanálů strojového učení.

Python Xml soubor

Následující části se zabývají analýzou, zápisem a čtením XML souborů v Python.

Co je XML?

XML je zkratka pro eXtensible Markup Language. Byl navržen pro ukládání a přenos malého až středního množství dat a je široce používán pro sdílení strukturovaných informací.

Python umožňuje analyzovat a upravovat dokumenty XML. Abyste mohli analyzovat dokument XML, musíte mít celý dokument XML v paměti. V tomto tutoriálu si ukážeme, jak můžeme použít třídu XML minidom v Python k načtení a analýze souborů XML.

Jak analyzovat XML pomocí minidomu

Vytvořili jsme vzorový soubor XML, který se chystáme analyzovat.

Krok 1) Vytvořte ukázkový soubor XML

Uvnitř souboru můžeme vidět jméno, příjmení, domov a oblast odbornosti (SQL, Python, Testování a podnikání).

Jak analyzovat XML pomocí minidomu

Krok 2) Pomocí funkce parse načtěte a analyzujte soubor XML

Jakmile dokument analyzujeme, vypíšeme „název uzlu“ kořene dokumentu a „proměnnou firstchild“. Proměnná a proměnná jsou standardní vlastnosti XML souboru.

Analyzujte XML pomocí minidomu

  • Importujte modul xml.dom.minidom a deklarujte soubor, který má být analyzován (myxml.xml)
  • Tento soubor obsahuje některé základní informace o zaměstnanci, jako je jméno, příjmení, domov, odbornost atd.
  • K načtení a analýze souboru XML používáme funkci parse na minidomu XML
  • Máme proměnnou doc ​​a doc získá výsledek funkce parse.
  • Chceme vypsat název uzlu a podřízený proměnný ze souboru, takže je deklarujeme ve funkci print.
  • Spusťte kód – vytiskne název uzlu (#document) ze souboru XML a první podřízený tagname (zaměstnanec) ze souboru XML

HodnoceníNázev uzlu a podřízený proměnný jsou standardní názvy nebo vlastnosti XML domény.

Krok 3) Vyvolejte seznam XML tagů z XML dokumentu a vytiskněte jej

Dále můžeme také vyvolat seznam XML tagů z XML dokumentu a vytisknout ho. Zde jsme vytiskli sadu dovedností, jako je SQL, Python, Testování a podnikání.

Analyzujte XML pomocí minidomu

  • Deklarujte proměnnou expertise, ze které budeme vycházettracvšechna odborná jména, která zaměstnanec má
  • Použijte standardní funkci dom s názvem „getElementsByTagName“
  • Tím získáte všechny prvky s názvem skill
  • Deklarujte smyčku nad každým z tagů dovedností
  • Spusťte kód - zobrazí se seznam čtyř dovedností

Jak napsat uzel XML

Můžeme vytvořit nový atribut pomocí funkce „createElement“ a poté tento nový atribut nebo značku připojit ke stávajícím značkám XML. Do našeho XML souboru jsme přidali nový tag „BigData“.

  1. Musíte napsat kód pro přidání nového atributu (BigData) do existující značky XML.
  2. Pak musíte vytisknout značku XML s novým atributem připojeným k existující značce XML.

Napište XML Node

  • Pro přidání nového XML tagu a jeho přidání do dokumentu použijeme kód „doc.createElement“.
  • Tento kód vytvoří nový tag dovednosti pro náš nový atribut „BigData“.
  • Přidejte tento tag dovednosti do prvního podřízeného prvku dokumentu (zaměstnanec)
  • Spusťte kód – zobrazí se nový tag „BigData“ s dalším seznamem odborných znalostí.

Příklad analyzátoru XML

Python 2 Příklad

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říklad

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

Jak analyzovat XML pomocí ElementTree

ElementTree je API pro manipulaci s XML. ElementTree nabízí snadný způsob zpracování XML souborů.

Jako vzorová data používáme následující dokument XML:

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

Čtení XML pomocí ElementTree:

Nejprve musíme importovat modul xml.etree.ElementTree.

import xml.etree.ElementTree as ET

Nyní si načtěme kořenový element:

root = tree.getroot()

Následuje kompletní kód pro čtení výše uvedených XML dat:

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ýstup:

Expertise Data:
SQL
Python

Nejčastější dotazy

Pro malé soubory, které vyžadují navigaci v DOMu, použijte minidom. Pro většinu prací zvolte ElementTree – je rychlejší, lehčí a doporučenější. Pythonvýchozí nastavení ic.

Zabalte kořen do ElementTree a zavolejte tree.write(“out.xml”, encoding=”utf-8″, xml_declaration=True). Pro odsazení použijte ET.indent() na Python 3.9+ nebo pretty_print z lxml.

lxml je knihovna třetí strany sdílející ElementTree API, ale založená na rychlém kódu v jazyce C. Přidává XPath, XSLT a validaci. Instalace pomocí pip install lxml.

Standardní parsery jsou zranitelné vůči útokům XXE a billion-laughs. Nainstalujte defusedxml a importujte defusedxml.ElementTree – drop-in náhradu, která deaktivuje nebezpečné externí entity.

Ano. Použijte minidom.parseString(text) nebo ET.fromstring(text) z ElementTree, které vrací přímo kořen. Oba metody parsují XML z proměnné, takže odpovědi není nutné nejprve ukládat.

Procházejte stromovou strukturou pomocí ElementTree a sestavujte dict z tagu, atributů a textu každého prvku. Knihovna xmltodict automatizuje konverzi pomocí xmltodict.parse().

XML ukládá konfigurace, anotace a odpovědi API, které slouží jako zdroj pro modely. Popisky obrázků Pascal VOC se dodávají jako XML; ElementTree extracpoužívá své ohraničující rámečky pro trénink.

Ano. GitHub Copilot automaticky dokončuje vzory minidom a ElementTree, jako jsou smyčky parse() a findall(). Stále ověřuje názvy a kódování tagů a přidává defusedxml pro nedůvěryhodný vstup.

Shrňte tento příspěvek takto: