繁体   English   中英

xml.etree.ElementTree getElementByID()?

[英]xml.etree.ElementTree getElementByID()?

如何使用Python库xml.etree.ElementTree获得等效的getElementByID()

似乎有一个叫做parseid()的方法,但是我的树已经被解析了。 我不想再次解析它。

我自己找到了它:

tree.findall('''.//*[@id='fooID']''')[0]

仍然欢迎更好或其他解决方案。 :-)

可接受的答案确实有效,但是性能可能会非常糟糕,因为-我的猜测是,我没有验证这一点,也许还与xpath的复杂性有关-遍历每一个树到findall() ,这可能会或可能不会请关注您的用例。

如果您担心性能,那么也许parseid()确实是您想要的。 如果要在现有树上获取此类id映射,则还可以轻松地手动执行一次遍历。

class getElementById():

    def __init__(self, tree):
        self.di = {}

        def v(node):
            i = node.attrib.get("id")
            if i is not None:
                self.di[i] = node

            for child in node:
                v(child)

        v(tree.getroot())


    def __call__(self, k):
        return self.di[k]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM