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
相关产品推荐
相关产品推荐

