如何使用 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)的每个元素。
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
[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)的每个元素。
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