查找 xml 标记:查找所有与完整路径名



这个问题更多地与使用一种方法而不是另一种方法有关(这种方法更pythonic,更健壮,等等(。假设我想搜索特定的标签和相应的文本,我目前使用findall然后搜索标签名称,如下所示

root = ET.parse(xml_file).getroot()
xmlns = {'opt' : 'http://asite.com/opt',
're' : 'http://anothersite.com'}
angle = float(root.findall('.//opt:Angle', xmlns)[0].text)

我可以指定该特定标记的路径,而不是使用findall构造函数,但通常是否建议使用一种方法而不是另一种方法? 这种查找方法仍然依赖于元素是第一个元素的事实。我还希望findall会/可以更灵活,并且可以指定完整的路径名。我担心的是XML结构是否发生变化(在这种情况下,当然尝试/例外然后发挥作用(。

良好的 xpath 查询规范应该既灵活又能提供最佳性能。使用findall可能会强制解析器加载并解析整个页面到最后(至少假设findall返回而不是产生结果 - 这是您通常不应该依赖的细节(。

因此,在我个人看来,使用find只是一种更好的工程实践。并不是说在实践中通常存在巨大差异。