摆脱lxml中的编码

时间:2010-05-24 18:50:58

标签: python lxml

我正在尝试使用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 个答案:

答案 0 :(得分:-2)

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

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

目前还不清楚为什么要删除它,因为最终XML需要知道什么是charset才能理解任何东西。 XML 1.0 spec包括一种猜测字符集的方法,似乎鼓励使用编码声明:

  

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

     

...

     

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