xml.etree.ElementTree getElementByID()?

时间:2015-01-05 12:29:27

标签: python xml-parsing

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

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

2 个答案:

答案 0 :(得分:1)

我自己找到了:

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

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

答案 1 :(得分:1)

可接受的答案确实有效,但是性能可能会非常糟糕,因为-我的猜测是,我没有验证这一点,也许还与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]