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

使用Python ElementTree解析含<b>标签的XML仅获value1,如何获取完整内容?

解决xml.etree.ElementTree获取标签完整内容的问题

当你用string.text获取内容时,只能拿到<string>开始标签到第一个子标签<b>之间的文本(也就是value1 ),而子标签<b>的内容和它后面的. value3分别存在子元素的text和tail属性里,所以需要特殊处理。

方法1:使用itertext()快速拼接

itertext()方法会递归遍历当前元素及其所有子元素的文本内容,返回一个包含所有文本片段的迭代器,直接拼接即可:

import xml.etree.ElementTree as ET
tree = ET.parse(xml_file)
root = tree.getroot()
for string in root.findall('string'):
    name = string.get('name')
    # 拼接所有文本片段
    value = ''.join(string.itertext())
    print(f"name: {name}, value: {value}")

运行后会输出:name: key, value: value1 value2. value3

方法2:手动遍历text、子元素text和tail

如果你需要更精细的控制(比如后续要处理标签结构),可以手动遍历元素的各个部分:

import xml.etree.ElementTree as ET
tree = ET.parse(xml_file)
root = tree.getroot()
for string in root.findall('string'):
    name = string.get('name')
    parts = []
    # 先添加当前元素的文本(如果存在)
    if string.text:
        parts.append(string.text)
    # 遍历所有子元素
    for child in string:
        # 添加子元素的文本
        if child.text:
            parts.append(child.text)
        # 添加子元素结束后的后续文本
        if child.tail:
            parts.append(child.tail)
    value = ''.join(parts)
    print(f"name: {name}, value: {value}")

这个方法和itertext()效果一致,但能让你清晰看到每个文本片段的来源。

原理说明

在ElementTree的解析逻辑里:

  • 元素的text属性:当前元素开始标签到第一个子元素(或结束标签)之间的文本
  • 子元素的text属性:子元素开始标签到其内部子元素(或结束标签)之间的文本
  • 子元素的tail属性:子元素结束标签到父元素的下一个子元素(或父元素结束标签)之间的文本

所以原来的代码只取了string.text,自然会漏掉子元素的内容和后续文本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 00:21:05