【问题标题】:Finding top-level xml comments using Python's ElementTree使用 Python 的 ElementTree 查找顶级 xml 注释
【发布时间】:2009-02-12 12:50:15
【问题描述】:

我正在使用 Python 的 ElementTree 解析一个 xml 文件,如下所示:

et = ElementTree(file=file("test.xml"))

test.xml 以几行 xml cmets 开头。

有没有办法从 et 获取这些 cmets?

【问题讨论】:

    标签: python xml elementtree


    【解决方案1】:

    对于 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 将读取它们 和 将它们视为评论或 处理指令元素 分别。

    【讨论】:

    • 很遗憾,python 2.5 附带的版本中没有 CommentHandler
    • 另外,使用内部库的东西风险太大,因为代码应该适用于未来版本的 python。
    • 这些是合法的论点。我编辑了答案并添加了替代解决方案。
    【解决方案2】:

    是的,有办法。

    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 时它们才会插入到结果结构中。

    【讨论】:

    • 请注意,这需要 Python 3.8。
    猜你喜欢
    • 2011-01-08
    • 2011-05-27
    • 2014-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-17
    • 1970-01-01
    • 2014-01-08
    相关资源
    最近更新 更多