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]