[英]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"
。是的,該代碼被破壞了——實際上在幾個方面——但我只需要解決它。)
幸運的是,“用戶數據”單引號或雙引號被編碼為'
和"
(分別)。 就我而言,我已經在使用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.