You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ElementTree中使用含根节点的完整路径获取XML元素?

问题解决:ElementTree使用包含根节点的完整路径查询元素

问题原因

你通过root = tree.getroot()获取的root已经是XML的根节点<Wikimedia>本身,原查询root.findall('Wikimedia/projects/project/editions/edition')是在root的子节点中查找名为Wikimedia的元素,而root的子节点只有<projects>,因此返回空列表。

正确写法

有两种方式实现包含根节点的完整路径查询:

  1. 绝对路径写法(以/开头):
    绝对路径从XML文档的根节点开始定位,语法如下:

    root.findall('/Wikimedia/projects/project/editions/edition')
    
  2. 相对路径写法(以./开头):
    ./代表当前节点(即root对应的<Wikimedia>),后续拼接子节点路径即可:

    root.findall('./projects/project/editions/edition')
    

验证示例

执行以下代码可确认查询结果有效:

import xml.etree.ElementTree as ET

xml_string = '''
<Wikimedia>
  <projects>
    <project name="Wikipedia" launch="2001-01-05">
      <editions>
        <edition language="English">en.wikipedia.org</edition>
        <edition language="German">de.wikipedia.org</edition>
        <edition language="French">fr.wikipedia.org</edition>
        <edition language="Polish">pl.wikipedia.org</edition>
        <edition language="Spanish">es.wikipedia.org</edition>
      </editions>
    </project>
    <project name="Wiktionary" launch="2002-12-12">
      <editions>
        <edition language="English">en.wiktionary.org</edition>
        <edition language="French">fr.wiktionary.org</edition>
        <edition language="Vietnamese">vi.wiktionary.org</edition>
        <edition language="Turkish">tr.wiktionary.org</edition>
        <edition language="Spanish">es.wiktionary.org</edition>
      </editions>
    </project>
  </projects>
</Wikimedia>
'''

tree = ET.ElementTree(ET.fromstring(xml_string))
root = tree.getroot()

# 使用绝对路径查询
editions = root.findall('/Wikimedia/projects/project/editions/edition')
for edition in editions:
    print(f"语言: {edition.attrib['language']}, 地址: {edition.text}")

内容的提问来源于stack exchange,提问作者Confounded

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 22:48:17