Heim >Backend-Entwicklung >Python-Tutorial >Wie ignoriere ich XML-Namespaces für die Elementposition in Python ElementTree?
Ignorieren von XML-Namespaces für die Elementposition in Python ElementTree
Im ElementTree-Modul kann das Auffinden bestimmter Elemente in einer XML-Datei eine Herausforderung darstellen Namespaces, wie im bereitgestellten Beispiel dargestellt. Bei Verwendung der Findall-Methode wird die Einfügung von {http://www.test.com} vor jedem Tag unpraktisch.
Lösung:
Anstatt das zu ändern Um ein XML-Dokument selbst zu erstellen, besteht ein optimalerer Ansatz darin, die Tag-Namen nach dem Parsen des XML zu ändern. Dies ermöglicht die Handhabung mehrerer Namespaces und Namespace-Aliase.
Hier ist der geänderte Code mit der Funktion iterparse:
<code class="python">from io import StringIO # for Python 2 import from StringIO instead import xml.etree.ElementTree as ET with open('test.xml', 'r') as f: xml = f.read() it = ET.iterparse(StringIO(xml)) for _, el in it: _, _, el.tag = el.tag.rpartition('}') # strip ns root = it.root</code>
Durch Setzen von _, _, el.tag = el.tag. rpartition('}') wird der Namespace (_{http://www.test.com}) aus dem Tag-Namen entfernt. Dies ermöglicht die spätere Verarbeitung von Tags ohne Berücksichtigung ihrer Namensräume. Folglich gibt die Findall-Methode:
<code class="python">el1 = root.findall("DEAL_LEVEL/PAID_OFF")</code>
den gewünschten
Das obige ist der detaillierte Inhalt vonWie ignoriere ich XML-Namespaces für die Elementposition in Python ElementTree?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!