繁体   English   中英

如何使用 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,但我还没有找到关于如何搜索 xml 中的所有元素并检索符合条件的每个元素(例如 href)的已解决问题。

基于元素树

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"]}')

output

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM