【发布时间】:2009-02-12 12:50:15
【问题描述】:
我正在使用 Python 的 ElementTree 解析一个 xml 文件,如下所示:
et = ElementTree(file=file("test.xml"))
test.xml 以几行 xml cmets 开头。
有没有办法从 et 获取这些 cmets?
【问题讨论】:
标签: python xml elementtree
我正在使用 Python 的 ElementTree 解析一个 xml 文件,如下所示:
et = ElementTree(file=file("test.xml"))
test.xml 以几行 xml cmets 开头。
有没有办法从 et 获取这些 cmets?
【问题讨论】:
标签: python xml elementtree
对于 ElementTree 1.2.X 有一篇关于 Reading processing instructions and comments with ElementTree (http://effbot.org/zone/element-pi.htm) 的文章。
编辑:
替代方法是使用实现 ElementTree API 的 lxml.etree。来自ElementTree compatibility of lxml.etree 的引用:
ElementTree 忽略 cmets 和 解析时处理指令 XML,而 etree 将读取它们 和 将它们视为评论或 处理指令元素 分别。
【讨论】:
是的,有办法。
from xml.etree import ElementTree
def parseXml (fn):
try:
target = ElementTree.TreeBuilder (insert_comments=True)
parser = ElementTree.XMLParser(target=target, encoding='utf-8')
et = ElementTree.parse (fn, parser)
except Exception as e:
print ("%s: %s" % (fn, str (e)))
return
for el in et.getroot ():
print (el)
同样适用于处理指令 (ElementTree.PI),仅当 insert_pis=true 时它们才会插入到结果结构中。
【讨论】: