Roland Hedberg, 30.07.2010 15:21:
I have the following XML snippet:

<RoleDescriptor
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
     xmlns:fed="http://docs.oasis-open.org/wsfed/federation/200706";
     xsi:type="fed:SecurityTokenServiceType">
     ....
</RoleDescriptor>

This part after parsing with Elementtree gives me an Element instance
with the following properties:

tree.tag
{urn:oasis:names:tc:SAML:2.0:metadata}RoleDescriptor
tree.keys()
['{http://www.w3.org/2001/XMLSchema-instance}type']
tree['{http://www.w3.org/2001/XMLSchema-instance}type']
fed:SecurityTokenServiceType

And there is the problem, I've lost the coupling between the prefix
'fed' and the namespace
"http://docs.oasis-open.org/wsfed/federation/200706";.

Is there any way I can get at the prefix<->  namespace mapping from an
Element instance ?
I've read the documentation I can find and there is nothing that tells
me how to get at the mapping.

If I print the Element instance the prefix 'fed' is replace by 'ns0' or
something like that.
Definitely something that has no connection to the original 'fed'.

Yes, ElementTree does that. There are two ways to work around this: recent ET versions support explicitly defining namespace-prefix mappings at a module global level (IIRC, starting with ET 1.3/Py2.7/Py3.2), so you can provide a fixed prefix if you know what's coming in.

Failing that, you can switch to lxml.etree, which keeps namespace prefixes as seen in the parsed document.

Stefan

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to