Python-ElementTree-Modul: How to ignorieren Sie den namespace des XML-Dateien zu suchen von übereinstimmenden element bei Verwendung der Methode "find", "findall"

Möchte ich die Methode "findall" zu suchen, einige Elemente der Quell-xml-Datei in der ElementTree-Modul.

Jedoch das Quell-xml-Datei (test.xml) hat namespace. Ich truncate-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>

Das Beispiel 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 funktioniert, weil es einen Namensraum "{http://www.test.com}", es ist sehr unbequem für einen namespace hinzuzufügen vor jedem tag.

Wie kann ich ignorieren Sie den Namensraum bei der Verwendung der Methode "find", "findall" und so weiter?

  • Ist tree.findall("xmlns:DEAL_LEVEL/xmlns:PAID_OFF", namespaces={'xmlns': 'http://www.test.com'}) bequem genug?
  • Dank sehr viel. Ich versuche Ihre Methode und es funktioniert. Es ist bequemer als meins aber es ist immer noch ein wenig umständlich. Wissen Sie, ob es gibt keine andere richtige Methode in der ElementTree-Modul um dieses Problem zu lösen, oder es gibt keine solche Methode überhaupt?
InformationsquelleAutor KevinLeng | 2012-11-16
Schreibe einen Kommentar