【发布时间】:2012-09-27 01:06:23
【问题描述】:
我正在用元素树编写一些 XML。
我给代码一个空的模板文件,它以 XML 声明开头:<?xml version= "1.0"?>,当 ET 完成更改并写入完整的 XML 时,去除声明并从根标记开始。我怎样才能阻止这个?
写调用:
ET.ElementTree(root).write(noteFile)
【问题讨论】:
标签: python xml elementtree
我正在用元素树编写一些 XML。
我给代码一个空的模板文件,它以 XML 声明开头:<?xml version= "1.0"?>,当 ET 完成更改并写入完整的 XML 时,去除声明并从根标记开始。我怎样才能阻止这个?
写调用:
ET.ElementTree(root).write(noteFile)
【问题讨论】:
标签: python xml elementtree
write(file, encoding="us-ascii", xml_declaration=None, method="xml")
将元素树以 XML 格式写入文件。 file 是文件名,或为写入而打开的文件对象。 encoding 1 是输出编码(默认为 US-ASCII)。 xml_declaration 控制是否应将 XML 声明添加到文件中。使用 False 表示从不,True 表示永远,None 仅在不是 US-ASCII 或 UTF-8 时使用(默认为 None)。方法是“xml”、“html”或“text”(默认为“xml”)。返回一个编码字符串。
所以,write(noteFile) 明确告诉它只有在编码不是 US-ASCII 或 UTF-8 并且编码是 US-ASCII 时才编写 XML 声明;因此,您不会得到任何声明。
我猜如果你没有读这么多,你的下一个问题将是“为什么我的 Unicode 坏了”,所以让我们同时解决这两个问题:
ET.ElementTree(root).write(noteFile, encoding="utf-8", xml_declaration=True)
【讨论】:
lxml 有一些非常智能的缓存,所以如果你只是读入一个小文件并将其写回,它会重用整个根节点。但是声明不是根节点的一部分,所以它确实无法绕过它。
ElementTree 有不同的版本。
有些接受xml_declaration 参数,有些不接受。
我碰巧有的没有。当且仅当encoding != 'utf-8' 时,它才会发出声明。所以,为了得到声明,我打电话给write(filename, encoding='UTF-8')。
【讨论】: