„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie ignoriere ich XML-Namespaces, wenn ich die Methoden „find“ und „findall“ von ElementTree in Python verwende?

Wie ignoriere ich XML-Namespaces, wenn ich die Methoden „find“ und „findall“ von ElementTree in Python verwende?

Veröffentlicht am 08.11.2024
Durchsuche:765

How to Ignore XML Namespaces when Using ElementTree\'s \

Ignorieren des XML-Namespace in den „find“- und „findall“-Methoden von ElementTree

Bei Verwendung des ElementTree-Moduls zum Parsen und Suchen von Elementen in XML-Dokumenten , Namespaces können zu Komplexität führen. So ignorieren Sie Namespaces, wenn Sie die Methoden „find“ und „findall“ in Python verwenden.

Das Problem tritt auf, wenn XML-Dokumente Namespaces enthalten, die dazu führen können, dass das ElementTree-Modul sie bei der Suche nach Tags berücksichtigt. Dies kann zu unerwarteten Ergebnissen führen, wie das Beispiel in der Frage zeigt:

el1 = tree.findall("DEAL_LEVEL/PAID_OFF")  # Return None
el2 = tree.findall("{http://www.test.com}DEAL_LEVEL/{http://www.test.com}PAID_OFF")  # Return element

Namespaces zu ignorieren ist die Lösung um die Tags im analysierten XML-Dokument zu ändern, bevor Sie die Methoden „find“ oder „findall“ verwenden. Dies kann mit der iterparse()-Methode von ElementTree erreicht werden:

import io
from xml.etree import ElementTree as ET

# Parse the XML document
it = ET.iterparse(StringIO(xml))

# Iterate over each element and strip the namespace if present
for _, el in it:
    _, _, el.tag = el.tag.rpartition("}")  # strip ns

# Get the modified root element
root = it.root

# Now, you can search for elements without namespaces
el3 = root.findall("DEAL_LEVEL/PAID_OFF")  # Return matching elements

Diese Lösung ändert die Tags im analysierten Dokument und erleichtert so das Auffinden von Elementen, ohne dass das Namespace-Präfix für jedes Tag manuell angegeben werden muss.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3