ElementTree, XML, Namespaces e Prefixos

por Walter Cruz on 15/05/2007
in Python, Programação

Essa semana eu precisei lidar com alguns arquivos XMI usando Python. Usei o ElementTree, que é uma API pra XML que foi incorporada recentemente ao core do Python (Python2.4).

Uma das coisas legais do elementTree é a forma de encontrar elementos: o método find. Porém, com o arquivo XMI não estava funcionando. O problema: XML Namespaces.

Namespaces em XML são uma recomendação da W3C. Por exemplo, você pode ter um XML que use partes para representar partes de um avião, um outro que use partes para representar partes de uma escrivaninha e outro que use partes para representar partes de um carro. A solução, descrita por James Clark, é adicionar antes da tag uma URI que seja o namespace dela.

Isso posto, voltemos ao meu querido XMI :P .

Lá no começo do arquivo XMI, tem xmlns:UML="http://schema.omg.org/spec/UML/1.3".

A busca:

content.find('Model')
 

não funciona.

O correto é:

print(content.find('{http://schema.omg.org/spec/UML/1.3}Model')
 

Coloquei um arquivo xmi de exemplo junto com um script python pra quem quiser testar. O xmi foi gerado com o Umbrello.

Não era tão difícil quanto parecia. Mas que espeta, espeta.B)