我正在用元素树编写一些 XML。
我为代码提供了一个以 XML 声明开头的空模板文件:<?xml version= "1.0"?>
当 ET 完成更改并写入完整的 XML 时,它会剥离声明并从根标记开始。我怎样才能阻止这个?
写调用:
ET.ElementTree(root).write(noteFile)
我正在用元素树编写一些 XML。
我为代码提供了一个以 XML 声明开头的空模板文件:<?xml version= "1.0"?>
当 ET 完成更改并写入完整的 XML 时,它会剥离声明并从根标记开始。我怎样才能阻止这个?
写调用:
ET.ElementTree(root).write(noteFile)
根据文档:
写(文件,编码=“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)
ElementTree 有不同的版本。他们中的一些人接受这个xml_declaration
论点,一些人不接受。
我碰巧有的没有。当且仅当它发出声明encoding != 'utf-8'
。所以,为了得到声明,我打电话给write(filename, encoding='UTF-8')
.