Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.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 version="1.0" encoding="utf-8"?> <foo/> 这个输出 <?xml version='1.0' encoding='us-ascii'?> <foo/> 但是如何在运行时获得file.xml的编码并将其作为参数传递给tree.write,或者有更好的方法在python中编辑xml?我只想更改一些元素。text但保持声明和名称空间不变。保持表单(与文档语义相反)真正不

我的原始xml文件如下所示:

<?xml version="1.0" encoding="utf-8"?>
<foo/>
这个输出

<?xml version='1.0' encoding='us-ascii'?>
<foo/>


但是如何在运行时获得
file.xml
的编码并将其作为参数传递给
tree.write
,或者有更好的方法在python中编辑xml?我只想更改一些
元素。text
但保持声明和名称空间不变。

保持表单(与文档语义相反)真正不变需要专门为此编写的XML库;这是非常罕见的,因为这是一个没有太多好处的额外工作很多。您所要求的不仅仅是保留编码——更严格的用途是否足够?…我的意思是,真正希望保持格式相同的人也会确保
不会被
替换(注意属性后面是否有空格的区别),捕获属性之间的顺序(文档语义没有变化的东西),等等。往返很难,有一个标准来提供一个文档被解析成的对象模型的完整描述,其部分目标是清楚地理解哪些更改具有语义意义,哪些更改没有……能够忽略无意义的更改是该模型的优点之一。(并不是说编码没有意义,但您要求的不仅仅是编码,而我正试图鼓励您缩小问题的范围)。如果您希望编码为UTF-8,则将
encoding='UTF-8'
传递到
树。编写
调用。如果不编写xml声明,则默认为1.0版和utf-8编码;编写良好的XML使用者不需要显式地声明它们;这是非常罕见的,因为这是一个没有太多好处的额外工作很多。您所要求的不仅仅是保留编码——更严格的用途是否足够?…我的意思是,真正希望保持格式相同的人也会确保
不会被
替换(注意属性后面是否有空格的区别),捕获属性之间的顺序(文档语义没有变化的东西),等等。往返很难,有一个标准来提供一个文档被解析成的对象模型的完整描述,其部分目标是清楚地理解哪些更改具有语义意义,哪些更改没有……能够忽略无意义的更改是该模型的优点之一。(并不是说编码没有意义,但您要求的不仅仅是编码,而我正试图鼓励您缩小问题的范围)。如果您希望编码为UTF-8,则将
encoding='UTF-8'
传递到
树。编写
调用。如果不编写xml声明,则默认为1.0版和utf-8编码;编写良好的XML使用者不需要显式地声明它们。
with open('file.xml','r+b') as f:
    tree = etree.parse(f)
    f.seek(0,0)
    tree.write(f,xml_declaration=True)# default argument: encoding="us-ascii"
<?xml version='1.0' encoding='us-ascii'?>
<foo/>