Ich möchte die Methode von "findall" verwenden, um einige Elemente der Quell-XML-Datei zu finden das Element Tree-Modul.Python ElementTree-Modul: Wie ignoriert man den Namespace von XML-Dateien, um übereinstimmendes Element zu finden, wenn die Methode "find", "findall"
Die Quell-XML-Datei (test.xml) verfügt jedoch über einen Namespace. Ich gestutzt Teil der XML-Datei als Beispiel:
<?xml version="1.0" encoding="iso-8859-1"?>
<XML_HEADER xmlns="http://www.test.com">
<TYPE>Updates</TYPE>
<DATE>9/26/2012 10:30:34 AM</DATE>
<COPYRIGHT_NOTICE>All Rights Reserved.</COPYRIGHT_NOTICE>
<LICENSE>newlicense.htm</LICENSE>
<DEAL_LEVEL>
<PAID_OFF>N</PAID_OFF>
</DEAL_LEVEL>
</XML_HEADER>
Die Probe Python-Code ist unten:
from xml.etree import ElementTree as ET
tree = ET.parse(r"test.xml")
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 '{http://www.test.com}DEAL_LEVEL/PAID_OFF' at 0xb78b90>
Obwohl es kann funktioniert, weil es einen Namespace „{http: //www.test. com} ", ist es sehr unpraktisch, vor jedem Tag einen Namensraum hinzuzufügen.
Wie kann ich den Namespace ignorieren, wenn ich die Methode "find", "findall" usw. verwende?
Ist 'tree.findall (" xmlns: DEAL_LEVEL/xmlns: PAID_OFF ", namespaces = {'xmlns': 'http://www.test.com'})' bequem genug? – iMom0
Vielen Dank. Ich versuche deine Methode und es kann funktionieren. Es ist bequemer als meins, aber es ist immer noch ein bisschen peinlich.Wissen Sie, ob es im ElementTree-Modul keine andere geeignete Methode gibt, um dieses Problem zu lösen, oder dass es überhaupt keine solche Methode gibt? – KevinLeng