The other day, I had a piece of Python code that deserialized an XML
text containing a UPnP service description to an ElementTree
instance using ElementTree.parse, then at a later stage serialized it
back to XML using ElementTree.write.
Now, the service description happened to contain non-qualified
attributes (like this: <stateVariable sendEvents="no">), which caused
the serialization to raise an error with the message “cannot use
non-qualified names with default_namespace option.” Googling around a
bit didn’t help much, since not many seem to have had this problem, or
there is no good solution to be found. (A few days later, this XKCD
strip was published. Spot on!)
So, inspired by example code at effbot.org, I wrote the following
workaround that simple updates each non-qualified attribute with the
namespace of its parent element during parsing. This is most
definitively not a proper solution, but it works in my case. Perhaps
it’ll help somebody else too!