etree, lxml unexpected behaviour

Stefan Behnel stefan_ml at
Wed Jun 17 16:58:06 EDT 2009

Emanuele D'Arrigo wrote:
> Hi everybody, I just tried the following:
>>>> import xml.etree.ElementTree as etree
>>>> e = etree.fromstring('<aRoot xmlns="aNamespace" xmlns:ans="anotherNamespace"><aChild anAttr="1" ans:anotherAttr="2"/></aRoot>')
>>>> e.getchildren()[0].attrib
> {'anAttr': '1', '{anotherNamespace}anotherAttr': '2'}
> Notice the lack of namespace before the attribute "anAttr". I find
> this unexpected because as you can see I did set the default namespace
> with xmlns="aNamespace" and the elements (rather than the attributes)
> are correctly associated with it, i.e.:
>>>> e
> <Element {aNamespace}aRoot at 2326cb0>
> Is there a way to change this behaviour so that attributes without
> namespace are correctly associated with the default namespace, just
> like the elements?

There isn't, because this is the correct behaviour according to the spec.

A default namespace declaration applies to all unprefixed element names
within its scope. Default namespace declarations do not apply directly to
attribute names; the interpretation of unprefixed attributes is determined
by the element on which they appear.


More information about the Python-list mailing list