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!