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

Python ElementTree如何提取含子元素的XML节点完整文本

Python ElementTree获取节点下所有拼接文本的实现

你可以直接用ElementTree节点自带的itertext()方法完成需求,不需要自己写递归遍历逻辑,具体实现如下:

完整实现代码

import xml.etree.ElementTree as ET

# 加载XML,根据你的实际场景二选一即可
# 场景1:读取本地XML文件
# tree = ET.parse("你的xml文件路径.xml")
# root = tree.getroot()

# 场景2:直接解析XML字符串(对应你给出的示例内容)
xml_str = """<?xml version="1.0" encoding="UTF-8"?>
<data>
    <text>
        I have <num1>two</num1> apples and <num2>four</num2> mangoes
    </text>
</data>"""
root = ET.fromstring(xml_str)

# 定位<text>节点
text_node = root.find("text")

# 拼接所有文本并清理多余空白
raw_text = "".join(text_node.itertext())
sentence = " ".join(raw_text.strip().split())

print(sentence)
# 输出结果:I have two apples and four mangoes

关键说明

  • 不要直接用text_node.text取值:这个属性只会返回<text>标签到第一个子元素(也就是<num1>)之间的文本,拿不到子元素内部和子元素后面的内容。
  • itertext()方法会按XML文档的先后顺序,递归遍历当前节点下所有的文本片段,包括节点自身的前置文本、所有子节点的内部文本、子节点闭合标签后的尾部文本,完全覆盖你需要的内容。
  • 因为XML写的时候带了换行、缩进的格式空白,所以最后通过strip()去掉首尾空白,再把中间连续的换行、多空格替换为单个空格,就能得到格式正确的目标字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 23:33:26