我使用 xml.etree.elementtree.Element 创建了一个 XML 文档,并想使用 ElementTree.write() 函数打印它,但出现的声明标签是
<?xml version='1.0' encoding='UTF-8'?>
虽然我需要用双引号。有没有办法改变它?
我有同样的问题,查看ElementTree.py的代码并看到以下内容。
对于根标签(单引号):
if method == "xml":
write("<?xml version='1.0' encoding='%s'?>\n" % encoding)
对于属性(双引号):
write(" %s=\"%s\"" % (qnames[k], v))
它是这样硬编码的...
我将其(本地)更改为:
"<?xml version=\"1.0\" encoding=\"%s\"?>\n"
所以现在每个属性都被双引号引起来。
最终我使用了 tostring 函数并将 XML 附加到正确的标签,然后是 python file.write 函数。这很丑陋(而且我对文件的实际编码撒谎)但它有效。
我做了和bg1987一样的事情。这是我写的功能,以防对某人有用
def wrTmp(treeObject, filepath):
xml_str = ('<?xml version="1.0" encoding="UTF-8"?>' + '\n' + xml.etree.ElementTree.tostring(treeObject.getroot(), method='xml'))
with open(filepath, 'wb') as xml_file:
xml_file.write(xml_str)
我不得不做几乎相同的事情,除了相反的方式,由于各种 $workplace 工具中的黑客需要单引号,而 pythonElementTree.write
放在双引号中。(一些代码查找文字字符串status='ok'
但无法识别status="ok"
。是的,该代码被破坏了——实际上在几个方面——但我只需要解决它。)
幸运的是,“用户数据”单引号或双引号被编码为'
和"
(分别)。就我而言,我已经在使用tostring
而不是write
(出于其他原因),所以我有:
import xml.etree.ElementTree as ET
# [... mass snippage]
text = ET.tostring(reply).replace('"', "'")
# [... snippaage]
self.wfile.write(text)
(显然你会想要replace("'", '"')
。)
另一种方法是(如果您还想漂亮地打印您的 xml)使用minidom.toprettyxml(encoding="UTF-8")
将 xml 和编码声明放在双引号中:
from xml.dom import minidom
xmlDom = minidom.parse("my_file.xml")
prettyXML = xmlDom.toprettyxml(encoding="UTF-8")
myfile = open(fileName, mode="wb")
myfile.write(prettyXML)
myfile.close()