Problem with Elementtree and XMLSchem instance type
Stefan Behnel
stefan_ml at behnel.de
Sat Aug 7 17:58:20 EDT 2010
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
More information about the Python-list
mailing list