簡體   English   中英

python: xml.etree.elementtree.ElemenTtree.write() 聲明標簽

[英]python: xml.etree.elementtree.ElemenTtree.write() declaration tag

我已經使用 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 工具中的黑客需要單引號,而 python 的ElementTree.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("'", '"')代替。)

另一種方法是(如果您還想漂亮地打印您的 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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM