lxml 解析时如何去除 <?xml ...> 标签?
我现在正在处理解析XML文档的工作,比如添加元素、添加属性等等。所以在开始处理之前,我需要先解析这个XML文件。然而,lxml
似乎把元素<?xml ...>
给去掉了。例如:
from lxml import etree
tree = etree.fromstring('<?xml version="1.0" encoding="utf-8"?><dmodule>test</dmodule>', etree.XMLParser())
print etree.tostring(tree)
最后的结果是:
<dmodule>test</dmodule>
有没有人知道为什么<?xml ...>
这个元素会被去掉呢?我以为编码标签是有效的XML呢。谢谢大家的帮助。
2 个回答
0
有没有人知道为什么要去掉
<?xml ...>
这个元素呢?
XML 默认使用的是 1.0 版本和 UTF-8 编码,所以如果你把它去掉,文档的内容其实是一样的。
你在处理一些 XML 数据,把它转成一个数据结构,然后再把这个数据结构转换回 XML。你得到的 XML 只是这个数据结构的一种表现方式,但可能跟原来的写法不一样(比如可以去掉开头的声明 <?xml ...>
,还有 <foo />
可以换成 <foo></foo>
,等等)。
7
<?xml>
这个部分是XML的声明,所以它并不算是一个真正的元素。它只是用来提供关于下面的XML结构的一些信息。
如果你想用lxml来打印出来,可以查看这里关于xmlDeclaration=TRUE
这个选项的一些信息。
http://lxml.de/api.html#serialisation
etree.tostring(tree, xml_declaration=True)