Suche…


Bemerkungen

Nicht alle Elemente der XML-Eingabe enden als Elemente des analysierten Baums. Derzeit werden in diesem Modul alle XML-Kommentare, Verarbeitungsanweisungen und Dokumenttypdeklarationen in der Eingabe übersprungen. Trotzdem können Bäume, die mit der API dieses Moduls erstellt wurden, anstatt aus XML-Text analysiert zu werden, Kommentare und Verarbeitungsanweisungen enthalten. Sie werden beim Generieren der XML-Ausgabe berücksichtigt.

Öffnen und Lesen mit einem ElementTree

Importieren Sie das ElementTree-Objekt, öffnen Sie die relevante XML-Datei und rufen Sie das Root-Tag ab:

import xml.etree.ElementTree as ET
tree = ET.parse("yourXMLfile.xml")
root = tree.getroot()

Es gibt mehrere Möglichkeiten, den Baum zu durchsuchen. Erstens durch Iteration:

for child in root:
    print(child.tag, child.attrib)

Ansonsten können Sie bestimmte Orte wie eine Liste referenzieren:

print(root[0][1].text)

Um nach bestimmten Tags nach Namen zu suchen, verwenden Sie .find oder .findall :

print(root.findall("myTag"))
print(root[0].find("myOtherTag"))

Ändern einer XML-Datei

Importieren Sie das Element Tree-Modul und öffnen Sie die XML-Datei, erhalten Sie ein XML-Element

import xml.etree.ElementTree as ET
tree = ET.parse('sample.xml')
root=tree.getroot()
element = root[0] #get first child of root element

Elementobjekte können durch Ändern der Felder, Hinzufügen und Ändern von Attributen sowie Hinzufügen und Entfernen von untergeordneten Elementen bearbeitet werden

element.set('attribute_name', 'attribute_value') #set the attribute to xml element
element.text="string_text"

Wenn Sie ein Element entfernen möchten, verwenden Sie die Element.remove () -Methode

root.remove(element)

ElementTree.write () - Methode zur Ausgabe des XML-Objekts in XML-Dateien.

tree.write('output.xml')

Erstellen und erstellen Sie XML-Dokumente

Importieren Sie das Element Tree-Modul

import xml.etree.ElementTree as ET

Die Funktion Element () wird zum Erstellen von XML-Elementen verwendet

p=ET.Element('parent')

SubElement () - Funktion zum Erstellen von Unterelementen zu einem gegebenen Element

c = ET.SubElement(p, 'child1')

Die Funktion dump () dient zum Ablegen von XML-Elementen.

ET.dump(p)
# Output will be like this
#<parent><child1 /></parent>

Wenn Sie in einer Datei speichern möchten, erstellen Sie einen XML-Baum mit der ElementTree () - Funktion und speichern Sie ihn in einer Datei

tree = ET.ElementTree(p)
tree.write("output.xml")

Die Comment () - Funktion wird verwendet, um Kommentare in die XML-Datei einzufügen.

comment = ET.Comment('user comment')
p.append(comment) #this comment will be appended to parent element

Öffnen und Lesen großer XML-Dateien mithilfe von iterparse (inkrementelles Parsing)

Manchmal möchten wir nicht die gesamte XML-Datei laden, um die benötigten Informationen zu erhalten. In diesen Fällen ist es nützlich, die relevanten Abschnitte inkrementell laden zu können und sie anschließend zu löschen, wenn wir fertig sind. Mit der iterparse-Funktion können Sie die Elementstruktur bearbeiten, die beim Analysieren der XML-Datei gespeichert wird.

Importieren Sie das ElementTree-Objekt:

import xml.etree.ElementTree as ET

Öffnen Sie die XML-Datei und durchlaufen Sie alle Elemente:

for event, elem in ET.iterparse("yourXMLfile.xml"):
    ... do something ...

Alternativ können wir nur nach bestimmten Ereignissen suchen, z. B. Start- / End-Tags oder Namespaces. Wenn diese Option weggelassen wird (wie oben), werden nur "End" -Ereignisse zurückgegeben:

events=("start", "end", "start-ns", "end-ns")
for event, elem in ET.iterparse("yourXMLfile.xml", events=events):
    ... do something ...

Das vollständige Beispiel zeigt, wie Elemente aus dem In-Memory-Baum gelöscht werden, wenn wir damit fertig sind:

for event, elem in ET.iterparse("yourXMLfile.xml", events=("start","end")):        
    if elem.tag == "record_tag" and event == "end":
        print elem.text
        elem.clear()
    ... do something else ...

Durchsuchen des XML mit XPath

Ab Version 2.7 ElementTree eine bessere Unterstützung für XPath-Abfragen. XPath ist eine Syntax, mit der Sie durch eine XML-Datei navigieren können, wie SQL zum Durchsuchen einer Datenbank verwendet wird. findall Funktionen find und findall unterstützen XPath. Die folgende XML wird für dieses Beispiel verwendet

 <Catalog>
    <Books>
        <Book id="1" price="7.95">
            <Title>Do Androids Dream of Electric Sheep?</Title>
            <Author>Philip K. Dick</Author>
        </Book>
        <Book id="5" price="5.95">
            <Title>The Colour of Magic</Title>
            <Author>Terry Pratchett</Author>
        </Book>
        <Book id="7" price="6.95">
            <Title>The Eye of The World</Title>
            <Author>Robert Jordan</Author>
        </Book>
    </Books>
</Catalog>

Suche nach allen Büchern:

import xml.etree.cElementTree as ET
tree = ET.parse('sample.xml')
tree.findall('Books/Book')

Suche nach dem Buch mit Titel = "Die Farbe der Magie":

tree.find("Books/Book[Title='The Colour of Magic']") 
# always use '' in the right side of the comparison

Suche nach dem Buch mit id = 5:

tree.find("Books/Book[@id='5']")
# searches with xml attributes must have '@' before the name

Suche nach dem zweiten Buch:

tree.find("Books/Book[2]")
# indexes starts at 1, not 0

Suche nach dem letzten Buch:

tree.find("Books/Book[last()]")
# 'last' is the only xpath function allowed in ElementTree

Suche nach allen Autoren:

tree.findall(".//Author")
#searches with // must use a relative path


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow