去掉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 个回答
-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,这也是一个致命错误。