如何在ElementTree中使用含根节点的完整路径获取XML元素?
问题解决:ElementTree使用包含根节点的完整路径查询元素
问题原因
你通过root = tree.getroot()获取的root已经是XML的根节点<Wikimedia>本身,原查询root.findall('Wikimedia/projects/project/editions/edition')是在root的子节点中查找名为Wikimedia的元素,而root的子节点只有<projects>,因此返回空列表。
正确写法
有两种方式实现包含根节点的完整路径查询:
绝对路径写法(以
/开头):
绝对路径从XML文档的根节点开始定位,语法如下:root.findall('/Wikimedia/projects/project/editions/edition')相对路径写法(以
./开头):./代表当前节点(即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
相关产品推荐
相关产品推荐

