Hey,
lxml (read: libxml2) supports XML 1.0 (don't think there were any relevant changes in 1.1, which you cite above) and is generally namespace aware. This means that ":" is considered a separator between a namespace prefix and the tag name, and is therefore not allowed as part of a plain (namespace-less) tag name.
What used to happen if you put a colon in a tag name? What would people expect to happen? I wonder whether it'd be possible to support namespace prefixes the proper way this way. I.e if I write: Element('foo:bar', nsmap={'foo': 'blah}) that could be equivalent to: Element('{blah}bar', nsmap={'foo': 'blah'}) The nice thing is that you could avoid having to write '{%s}foo' % my_namespace a lot. Of course this has consequences for other areas, such as 'tag', so I'm not sure whether this is a good idea, but throwing it in. It's definitely another extension on ElementTree, which can't really do this kind of stuff well due to the lack of parent pointers. Regards, Martijn