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]
如何使用 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]