Saving XML using ETree in Python. It's not retaining namespaces, and adding ns0, ns1 and removing xmlns tags
You need to register the prefix and the namespace before you do fromstring()
(Reading the xml) to avoid the default namespace prefixes (like ns0
and ns1
, etc.) .
You can use the ET.register_namespace()
function for that, Example -
ET.register_namespace('<prefix>','http://Test.the.Sdk/2010/07')
ET.register_namespace('a','http://schema.test.org/2004/07/Test.Soa.Vocab')
You can leave the <prefix>
empty if you do not want a prefix.
Example/Demo -
>>> r = ET.fromstring('<a xmlns="blah">a</a>')
>>> ET.tostring(r)
b'<ns0:a xmlns:ns0="blah">a</ns0:a>'
>>> ET.register_namespace('','blah')
>>> r = ET.fromstring('<a xmlns="blah">a</a>')
>>> ET.tostring(r)
b'<a xmlns="blah">a</a>'