去掉lxml中的编码

1 投票
1 回答
1734 浏览
提问于 2025-04-15 23:06

我正在尝试用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'>

1 个回答

-3

只要lxml.etree输出的是有效的XML,具体输出什么其实并不重要。如果你真的想要的话,可以把字符串拼接在一起:

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

不太清楚你为什么想要去掉它,因为最终XML需要知道它使用的字符集,这样才能理解内容。XML 1.0规范中提到了一种猜测字符集的方法,并且似乎鼓励使用编码声明:

如果没有[外部信息],那么如果一个实体既没有字节顺序标记(Byte Order Mark)也没有编码声明,而使用了UTF-8以外的编码,这将是一个致命错误。

...

除非通过更高层的协议确定编码,否则如果一个XML实体没有编码声明,并且其内容不是合法的UTF-8或UTF-16,这也是一个致命错误。

撰写回答