Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 覆盖一个XML文件,我的一个命名空间丢失_Python_Xml - Fatal编程技术网

Python 覆盖一个XML文件,我的一个命名空间丢失

Python 覆盖一个XML文件,我的一个命名空间丢失,python,xml,Python,Xml,我正在解析一个XML文件,替换它的值并覆盖它,一切正常,但覆盖后我的两个根的名称空间之一丢失了 我发现我必须注册我的名称空间,我这样做了,但没有改变: 有一个Xml文件输入: <?xml version="1.0" encoding ="utf8"?> <Document xmlns:xsi = "sample" xmlns ="sample2"> 写作方法: tree.write(path

我正在解析一个XML文件,替换它的值并覆盖它,一切正常,但覆盖后我的两个根的名称空间之一丢失了

我发现我必须注册我的名称空间,我这样做了,但没有改变:

有一个Xml文件输入:

<?xml version="1.0" encoding ="utf8"?>
<Document xmlns:xsi = "sample" xmlns ="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"/>


那么您使用的是ElementTree?也许没有使用xsi:省略这个名称空间会带来任何问题吗?是的,我的脚本中没有使用xsi,你认为这就是问题所在吗?省略未使用的名称空间似乎不是一个“问题”,为什么需要确保XML包含未使用的名称空间?
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"/>