Parsing von XML mit Namespaces mithilfe von ElementTree in Python

Ich habe eine XML, ein kleiner Teil davon sieht so aus:

<?xml version="1.0" ?>
<i:insert xmlns:i="urn:com:xml:insert" xmlns="urn:com:xml:data">
  <data>
    <image imageId="1"></image>
    <content>Content</content>
  </data>
</i:insert>

Wenn ich es mit @ analysierElementTree und speichere es in einer Datei, die ich wie folgt sehe:

<ns0:insert xmlns:ns0="urn:com:xml:insert" xmlns:ns1="urn:com:xml:data">
  <ns1:data>
    <ns1:image imageId="1"></ns1:image>
    <ns1:content>Content</ns1:content>
  </ns1:data>
</ns0:insert>

Warum werden Präfixe geändert und überall platziert? @ Verwendminidom Ich habe kein solches Problem. Ist es konfiguriert? Dokumentation fürElementTree ist sehr arm. Das Problem ist, dass ich nach einem solchen Parsing keinen Knoten finden kann, zum Beispielimage - kann es nicht mit oder ohne Namespace finden, wenn ich es wie @ benut{namespace}image oder nurimage. Warum ist das? Anregungen sind ausdrücklich erwünscht.

Was ich schon ausprobiert habe:

import xml.etree.ElementTree as ET
tree = ET.parse('test.xml')
root = tree.getroot()
for a in root.findall('ns1:image'):
    print a.attrib

Dies gibt einen Fehler zurück und der andere gibt nichts zurück:

for a in root.findall('{urn:com:xml:data}image'):
    print a.attrib

Ich habe auch versucht, den Namespace so zu gestalten und zu verwenden:

namespaces = {'ns1': 'urn:com:xml:data'}
for a in root.findall('ns1:image', namespaces):
    print a.attrib

It gibt nichts zurück. Was mache ich falsch

Antworten auf die Frage(4)

Ihre Antwort auf die Frage