覆盖XML文件,但缺少我的nameSpace之一

问题描述

我正在解析一个XML文件,替换它的值并覆盖它,一切正常,但是覆盖后缺少我两个根目录的名称空间之一。

我发现我必须注册我的名称空间,但确实没有改变它:

有Xml文件输入:

<?xml version="1.0" encoding ="utf8"?>
<Document xmlns:xsi = "sample" xmlns ="sample2">

输出

<?xml version='1.0' encoding='UTF-8'?>
<Document xmlns="sample2">

当我注册我的名称空间时:

ET.register_namespace('xsi',"sample")
ET.register_namespace('',"Sample2" )

写作方法

tree.write(path,xml_declaration=True,method='xml',encoding='UTF-8')

您有什么问题吗,我该如何解决

解决方法

使用lxml库可能会更容易:

from lxml import etree

nsmap = {'xsi': "sample",None: "sample2"}
root = etree.Element('Document',nsmap=nsmap)
print(etree.tostring(root))

给出期望的输出:

<Document xmlns:xsi="sample" xmlns="sample2"/>