Re: Remove namespace declaration from ElementTree in lxml



:

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.
.



Relevant Pages

  • Re: using regexes as command line parameters
    ... >> where s is the search regex and r the replace regex. ... >> leads to either an exmpty value in the replaced string, ... > What you need to do is tell Perl to evaluate that literal string as ...
    (comp.lang.perl.misc)
  • Re: Need Regular Expressions?
    ... IME it's easier to maintain one regex than the tens or hundreds of lines ... it's not regexes that are error prone but the people who ... Later on, with unexpected input, it may give you ...
    (microsoft.public.access.modulesdaovba)