1

我正在尝试使用 lxml 和 Python 打印 XML 文件。

这是代码:

>>> from lxml import etree
>>> root = etree.Element('root')
>>> child = etree.SubElement(root, 'child')
>>> print etree.tostring(root, pretty_print = True, xml_declaration = True, encoding = None)

输出:

<?xml version='1.0' encoding='ASCII'?>
<root>
  <child/>
</root>

如您所见,我已经声明encoding = None了 ,但它仍然显示encoding = 'ASCII'在最终输出中。我猜这是预期的。如果我不输入encoding标签,它仍然显示 ASCII。

有什么办法可以只获取 XML 版本标签而不是编码部分?我希望输出是这样的:

<?xml version='1.0'>
4

1 回答 1

-2

只要它是有效的 XML,lxml.etree 输出什么都无关紧要。如果你真的想,你可以把字符串粘在一起:

'<?xml version="1.0"?>\n' + etree.tostring(root, pretty_print = True, encoding = 'ASCII')

不清楚为什么要删除它,因为最终 XML 需要知道它所在的字符集才能理解任何内容。XML 1.0 规范包括一种猜测字符集的方法,并且似乎鼓励使用编码声明:

在没有 [外部信息] 的情况下,这是一个致命错误……对于既不以字节顺序标记也不以编码声明开头的实体使用 UTF-8 以外的编码。

...

除非编码由更高级别的协议确定,否则如果 XML 实体不包含编码声明并且其内容不是合法的 UTF-8 或 UTF-16,这也是致命错误。

于 2010-05-24T19:24:04.023 回答