10

我正在用元素树编写一些 XML。

我为代码提供了一个以 XML 声明开头的空模板文件:<?xml version= "1.0"?>当 ET 完成更改并写入完整的 XML 时,它会剥离声明并从根标记开始。我怎样才能阻止这个?

写调用:

ET.ElementTree(root).write(noteFile)

4

2 回答 2

23

根据文档

写(文件,编码=“us-ascii”,xml_declaration=无,方法=“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)
于 2012-09-27T01:18:14.860 回答
6

ElementTree 有不同的版本。他们中的一些人接受这个xml_declaration论点,一些人不接受。

我碰巧有的没有。当且仅当它发出声明encoding != 'utf-8'。所以,为了得到声明,我打电话给write(filename, encoding='UTF-8').

于 2013-11-02T03:09:42.103 回答