如何使用 xpath 获取 XML(包括深度嵌套的元素)中 *any* 元素的 href 属性?

How can I get the href attribute of *any* element in an XML (included deeply nested ones) using xpath?

[Python] 我正在尝试在 XML 文档的任何级别检索具有 href 属性的 XML 文档中的任何元素。例如:

<OuterElement href='a.com'>
  <InnerElement>
    <NestedInner href='b.com' />
    <NestedInner href='c.com' />
    <NestedInner />
  </InnerElement>
  <InnerElement href='d.com'/>
</OuterElement>

将检索以下元素(作为 lxml 元素对象,为视觉清晰起见进行了简化):

[<OuterElement href='a.com'>, <NestedInner href='b.com' />, <NestedInner href='c.com' />, <InnerElement href='d.com'/>]

我尝试使用以下代码检索任何带有 href 标签的元素,但它在充满具有 href 属性的元素的文件中检索到零个元素:

with(open(file, 'rb')) as f:
    xml_tree = etree.parse(f)
    href_elements = xml_tree.xpath(".//*[@href]")

此代码 select 任何 元素 (.//*) 不应该具有指定的属性 ([@href]) 吗?根据我的理解(如果我错了一定要纠正我,我很可能是错的),href_elements 应该是一个 lxml 元素对象数组,每个对象都有一个 href 属性。

重要说明:我看到很多人在 Stack Overflow 上询问 xpath,但我还没有找到一个关于如何搜索 all 的解决问题 个 xml 元素并检索符合条件(例如 href)的每个元素。

基于ElementTree

import xml.etree.ElementTree as ET

xml = '''<OuterElement href='a.com'>
  <InnerElement>
    <NestedInner href='b.com' />
    <NestedInner href='c.com' />
    <NestedInner />
  </InnerElement>
  <InnerElement href='d.com'/>
</OuterElement>'''

root = ET.fromstring(xml)
elements_with_href = [root] if 'href' in root.attrib else []
elements_with_href.extend(root.findall('.//*[@href]'))
for e in elements_with_href:
  print(f'{e.tag} : {e.attrib["href"]}')

输出

OuterElement : a.com
NestedInner : b.com
NestedInner : c.com
InnerElement : d.com