Python XML解析:如何获取子元素中子节点后的文本内容
解决Python ElementTree获取子元素后文本的问题
这个场景我太熟悉啦!你遇到的问题是因为ElementTree对XML文本的存储规则:元素的text属性只保存该元素第一个子元素之前的文本,而子元素之后的文本会存在那个子元素的tail属性里。
你的原XML里,"it"是在<PTR>标签之后,所以它属于<PTR>元素的tail,而不是<EXP ID="1">的text。
修改后的代码示例
import xml.etree.ElementTree as ET sample = '''<EXP ID="2"> <W> love <EXP ID="1"> <PTR src="0" /> it </EXP> </W> </EXP>''' r = ET.fromstring(sample) for c in r: # 用strip()去掉多余空白字符,让输出更整洁 print(c.tag, c.attrib, c.text.strip()) for d in c: print(d.tag, d.attrib, end=' ') # 遍历d的子元素(也就是<PTR>),获取它的tail属性 for child in d: print(child.tail.strip())
执行这段代码后,输出就会符合你的期望:
W {} love EXP {'ID': '1'} it
如果知道XML结构,还可以直接定位目标文本
如果不需要遍历所有元素,而是直接获取"it",可以用XPath快速定位:
exp_element = r.find('.//EXP[@ID="1"]') ptr_element = exp_element.find('PTR') print(ptr_element.tail.strip()) # 直接输出 'it'
补充知识点
element.text:存储元素起始标签到第一个子元素之间的文本element.tail:存储元素结束标签到父元素的下一个子元素(或父元素结束标签)之间的文本
内容的提问来源于stack exchange,提问作者A_Matar
相关产品推荐
相关产品推荐

