我正在用元素树编写一些XML。
我给代码一个空的模板文件,该文件以XML声明开头:<?xml version= "1.0"?>
当ET完成更改并写入已完成的XML时,它会删除声明并从根标记开始。我怎么能阻止这个?
写电话:
ET.ElementTree(root).write(noteFile)
答案 0 :(得分:19)
write(file,encoding =“us-ascii”,xml_declaration = None,method =“xml”)
将元素树作为XML写入文件。 file是文件名,或者是为写入而打开的文件对象。 encoding 1是输出编码(默认为US-ASCII)。 xml_declaration控制是否应将XML声明添加到文件中。永远使用False,始终使用True,仅当不是US-ASCII或UTF-8时使用None(默认为None)。 method是“xml”,“html”或“text”(默认为“xml”)。返回一个编码的字符串。
因此,write(noteFile)
明确告诉它只有在编码不是US-ASCII或UTF-8时编写XML声明,并且编码是US-ASCII;因此,你没有得到声明。
我猜你是不是读了这么多,你的下一个问题是“为什么我的Unicode被破坏了”,所以我们马上解决这个问题:
ET.ElementTree(root).write(noteFile, encoding="utf-8", xml_declaration=True)
答案 1 :(得分:5)
ElementTree有不同版本。
其中一些接受xml_declaration
参数,有些则不接受。
我碰巧遇到的那个没有。当且仅当encoding != 'utf-8'
时,它才会发出声明。所以,要获得声明,我打电话给write(filename, encoding='UTF-8')
。