18

我使用 xml.etree.elementtree.Element 创建了一个 XML 文档,并想使用 ElementTree.write() 函数打印它,但出现的声明标签是

<?xml version='1.0' encoding='UTF-8'?>

虽然我需要用双引号。有没有办法改变它?

4

5 回答 5

6

我有同样的问题,查看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"

所以现在每个属性都被双引号引起来。

于 2016-06-27T12:14:50.293 回答
3

最终我使用了 tostring 函数并将 XML 附加到正确的标签,然后是 python file.write 函数。这很丑陋(而且我对文件的实际编码撒谎)但它有效。

于 2012-05-07T12:04:50.527 回答
1

我做了和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)
于 2018-05-24T17:30:46.283 回答
0

我不得不做几乎相同的事情,除了相反的方式,由于各种 $workplace 工具中的黑客需要单引号,而 pythonElementTree.write放在双引号中。(一些代码查找文字字符串status='ok'但无法识别status="ok"。是的,该代码被破坏了——实际上在几个方面——但我只需要解决它。)

幸运的是,“用户数据”单引号或双引号被编码为&apos;&quot;(分别)。就我而言,我已经在使用tostring而不是write(出于其他原因),所以我有:

import xml.etree.ElementTree as ET
# [... mass snippage]
        text = ET.tostring(reply).replace('"', "'")
        # [... snippaage]
        self.wfile.write(text)

(显然你会想要replace("'", '"')。)

于 2012-05-06T17:27:52.507 回答
0

另一种方法是(如果您还想漂亮地打印您的 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()
于 2020-09-08T14:28:00.133 回答