Heim  >  Artikel  >  Backend-Entwicklung  >  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?

DDD
DDDOriginal
2024-10-26 11:56:03956Durchsuche

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 diese bei der Suche nach Tags berücksichtigt. Dies kann zu unerwarteten Ergebnissen führen, wie das Beispiel in der Frage zeigt:

<code class="python">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</code>

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

<code class="python">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</code>

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.

Das obige ist der detaillierte Inhalt vonWie ignoriere ich XML-Namespaces, wenn ich die Methoden „find“ und „findall“ von ElementTree in Python verwende?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn