Python Language
XML bearbeiten
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