Analisando XML com namespaces usando ElementTree em Python
Eu tenho um xml, uma pequena parte dele se parece com isso:
<?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>
Quando eu o analiso usandoElementTree
e salve-o em um arquivo que eu vejo a seguir:
<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>
Por que ele altera prefixos e os coloca em todos os lugares? Usandominidom
Eu não tenho esse problema. Está configurado? Documentação paraElementTree
é muito pobre. O problema é que não consigo encontrar nenhum nó após essa análise, por exemploimage
- não consigo encontrá-lo com ou sem espaço para nome, se eu o usar como{namespace}image
ou apenasimage
. Por que isso? Todas as sugestões são fortemente apreciadas.
O que eu já tentei:
import xml.etree.ElementTree as ET
tree = ET.parse('test.xml')
root = tree.getroot()
for a in root.findall('ns1:image'):
print a.attrib
Isso retorna um erro e o outro não retorna nada:
for a in root.findall('{urn:com:xml:data}image'):
print a.attrib
Eu também tentei criar um espaço para nome como este e usá-lo:
namespaces = {'ns1': 'urn:com:xml:data'}
for a in root.findall('ns1:image', namespaces):
print a.attrib
Não retorna nada. O que estou fazendo errado?