Remove namespace declaration from ElementTree in lxml

Zero Piraeus schesis at gmail.com
Fri Dec 28 14:28:38 EST 2007


:

> > I want to remove an unused namespace declaration from the root element
> > of an ElementTree in lxml.
>
> > [...] I'm reduced to sticking the output through str.replace() ...
> > which is somewhat inelegant.
>
> And also a bit error prone (unless you are sure the replaced string really
> only occurs where you want to replace it).

"Nada es seguro" ... but it does seem unlikely that

  ' xmlns:someprefix="urn:foo:bar"'

will appear in the content. Not impossible though, I suppose. If I
want to try and make sure I only catch it as an element's attribute,
that leads me to a regex, which seems an even less clever idea.

> You can try this:
>
>    root = etree.parse(...).getroot()
>    new_root = etree.Element(root.tag, root.attrib)
>    new_root[:] = root[:]
>
> Note, however, that this will not copy root-level PIs or internal DTD subsets.
> But you can copy PIs and comments by hand.

Thanks. I considered copying the tree, but didn't bother trying it as
I would expect it to be fairly expensive. Maybe no more expensive than
a regex though. I'll take a look ...

 -[]z.



More information about the Python-list mailing list