'<?xml version=“1.0” encoding=“utf-8”?>' 在将 xml 编码为字符串 python 后消失

'<?xml version="1.0" encoding="utf-8"?>' disappears after encoding xml to string python

提问人:John 提问时间:11/30/2022 最后编辑:nwellnhofJohn 更新时间:12/1/2022 访问量:1740

问:

在我的 xml 文件中,我一开始就有。但是如果我将其编码为字符串,它就会消失。我的意思是我的字符串在开始时不再有它了。我以为我可以简单地将它插入我的字符串中,就像在下面的代码中一样(打印时有效),但是当我想再次将字符串保存为xml并在笔记本电脑上打开它时,就不再存在了。<?xml version="1.0" encoding="utf-8"?><?xml version="1.0" encoding="utf-8"?>

import xml.etree.ElementTree as ET

tree = ET.parse(r'someData.xml')
root = tree.getroot()

xml_str = ET.tostring(root, encoding='unicode')
xml_str = '<?xml version="1.0" encoding="utf-8"?>' + xml_str

有没有人知道如何在不丢失的情况下将 xml 编码为字符串,或者如何在不丢失的情况下将字符串保存为 xml?我的目标是将它包含在我导出的 xml 中。先谢谢你!!<?xml version="1.0" encoding="utf-8"?>

python utf-8 lxml xml 编码

评论

0赞 Joachim Sauer 11/30/2022
xml_declaration=True应该工作。
0赞 John 11/30/2022
@JoachimSauer 不,不幸的是,这给了我一个<?xml version=\'1.0\' encoding=\'cp1252\'?>\n<?xml version="1.0" encoding="utf-8"?>
0赞 Joachim Sauer 11/30/2022
然后尝试将 actual 指定为编码。但请注意,在这种情况下将返回一个字节字符串(因为在返回 unicode 字符串时,具体编码没有意义)。UTF-8ET.toString()
0赞 John 11/30/2022
@JoachimSauer 是的,这确实有效!!我不得不使用 .decode() 将其转换为字符串。但是,当我想保存它时,它不在导出的 xml 文件中。关于如何解决这个问题的任何想法?tree = ET.ElementTree(ET.fromstring(`xml_str)) tree.write(open('test2.xml', 'a'), encoding='unicode')
0赞 Joachim Sauer 11/30/2022
元素树本身不包含该信息,因此在字符串和 ElementTree 之间来回切换毫无意义。只需使用您的(原始的,未经修改的)ElementTree并调用它!编码纯粹表示形式(即实际字节)的属性,而不是存储在文件中的 xml 数据的一部分。这就是为什么当你通过一个 ElementTree 对象时它会“丢失”的原因。ET.write(..., encoding='UTF-8')

答:

1赞 John 12/1/2022 #1

要使其更明显,请执行以下操作:

在我保存文件之前,所以:

tree = ET.ElementTree(ET.fromstring(xml_str)) 
tree.write(open('test2.xml', 'a'), encoding='unicode')

但是现在,我像这样保存它,这样我就不会错过 xml 文件开头的声明:

tree = ET.ElementTree(ET.fromstring(xml_str)) 
tree.write(open('test.xml', 'wb'), encoding="utf-8", xml_declaration=True)