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

如何使用Python提取XML中所有节点文本及节点间符号等全部元素

问题原因分析

你原有代码丢失元素的核心原因有两个:

  • 仅处理了没有子元素的叶子节点的text属性,忽略了有子元素的父节点本身携带的文本(比如<init>标签的文本是=,因为它包含<expr>子元素,原有逻辑直接跳过了该层的文本提取)
  • 完全没有处理XML元素的tail属性:XML语法中,元素结束标签后紧跟的非子元素文本会存在tail属性中,比如<decl></decl>:里的冒号、<parameter></parameter>}里的右花括号都属于tail内容,原有逻辑完全没提取这部分内容
修正后代码
import xml.etree.ElementTree as ET

# 注册命名空间避免标签自动携带前缀,不影响文本提取可按需保留
ET.register_namespace('', 'http://www.example.org/domain/src')

xml = ET.parse('1.xml')
root = xml.getroot()

def split_text(text):
    """将文本按空白切割,过滤空字符串,返回拆分后的独立元素列表"""
    if not text:
        return []
    return [item.strip() for item in text.split() if item.strip()]

def getDataRecursive(element):
    data = list()
    # 提取当前元素的文本内容
    data.extend(split_text(element.text))
    # 递归处理所有子元素
    for child in element:
        data.extend(getDataRecursive(child))
    # 提取当前元素结束标签后的尾部文本
    data.extend(split_text(element.tail))
    return data

# 打印结果
for x in getDataRecursive(root):
    print(x)
代码修改说明
  • 移除了叶子节点判断逻辑,所有元素的text都会被提取
  • 新增tail属性提取逻辑,补全了元素结束标签后的遗漏内容
  • 新增文本拆分逻辑,自动把空格分隔的关键字、符号拆分为独立列表元素,同时过滤掉换行、缩进等无效空白

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 14:09:05