我正在尝试使用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'>
答案 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,则也是致命错误。