[lxml-dev] Serialization with namespaces

Stefan Behnel stefan_ml at behnel.de
Wed Sep 12 14:54:08 CEST 2007


Stefan Behnel wrote:
> Stefan Behnel wrote:
>> Anders Bruun Olsen wrote:
>>> Now the problem occurs when I try to serialize. When I serialize the
>>> root, everything looks fine:
>>>
>>>    >>> etree.tostring(root, pretty_print=True)
>>>    '<topicMap xmlns="http://www.topicmaps.org/xtm/1.0/"
>>> xmlns:xlink="http://www.w3.org/1999/xlink" id="personnavnereg1">
>>>    ...
>>>
>>> The XML Namespace is applied as it should. However on the topic-element
>>> that I found using XPath no XML Namespace is output:
>>>
>>>    >>> etree.tostring(elem, pretty_print=True)
>>>    '<topic id="abeleHenriksdatter">\n\t\t<instanceOf>\n\t\t\t<topicRef
>>>   ...
>>>
>>> Even though the nsmap attribute is set correctly:
>>>
>>>    >>> elem.nsmap
>>>    {None: 'http://www.topicmaps.org/xtm/1.0/', 'xlink':
>>> 'http://www.w3.org/1999/xlink'}
>> Hmm, I actually thought these problems were gone with 1.3, but I can reproduce
>> this with the current trunk.
> 
> Ok, so the problem here is libxml2. It serialises only the namespaces that are
> defined on the node itself, not all those that are defined in the node's context.

Here's a patch (against the trunk) that works for me. It copies the node
before the serialisation and adds all namespaces that were declared up in the
tree.

Stefan
-------------- next part --------------
A non-text attachment was scrubbed...
Name: ns-serialisation.patch
Type: text/x-diff
Size: 3984 bytes
Desc: not available
Url : http://codespeak.net/pipermail/lxml-dev/attachments/20070912/c376e7b9/attachment.bin 


More information about the lxml-dev mailing list