On 02/02/2014 13:37, Stefan Behnel wrote:
and when you only serialise one of the elements in that tree, lxml will make sure the output is correct, i.e. it contains all necessary namespace declarations.
For what it's worth, I've wanted to do this as well, in the context of incrementally generating 2nd-level tags in a long-running XML stream (like XMPP). So I've already sent: <stream xmlns="http://foo/bar" xmlns:baz="http://foo/ban"> ...and then at arbitrary intervals I want to send: <rpc> <command> <arg baz:format="xx">val</arg> </command> </rpc> ...but the lxml objects are namespaced from "http://foo/bar". I could just leave the namespace on the rpc tag as well but it seems cleaner not to (and matches what existing libs do for this particular protocol).
What you could do for debugging is something like this (untested!):
Interesting approach. Do you have any feel for how fast (or slow) this would be on large-ish documents? Also, this alters the tags, rather than preventing emitting the namespace. So it only works for a sub-set of cases, and in particular would not let me emit the "baz:format" as above, I think? Another approach is to wrap the thing in a dummy tag for string-isation and munge the text, but that's really yucky...