Python如何从XML中提取所有文本内容

发布时间 - 2026-01-09 00:00:00    点击率:
最常用且可靠的方式是用xml.etree.ElementTree或lxml,核心是遍历元素并递归收集.text和.tail属性值,注意判空、去空白及编码处理。

Python中提取XML所有文本内容,最常用且可靠的方式是用xml.etree.ElementTree(标准库)或第三方库lxml。核心思路是:遍历所有元素,获取其.text.tail属性,并递归处理子元素。

使用ElementTree提取全部文本(推荐初学者)

ElementTree无需安装,适合简单到中等复杂度的XML。注意它默认不保留空白文本,若需完整文本(含换行缩进),建议用xml.etree.ElementTree.XMLParser配合strip_cdata=False,但更关键的是要同时收集texttail

  • element.text:元素开始标签与第一个子元素(或结束标签)之间的文本
  • element.tail:元素结束标签与下一个兄弟元素开始标签之间的文本(常被忽略!)
  • 递归遍历时,对每个元素先加text,再递归子元素,最后加tail

代码示例:安全提取全部可见文本

以下函数会返回去除首尾空白、跳过纯空白节点后的所有文本片段(保留自然断句):

import xml.etree.ElementTree as ET

def extract_all_text(root): texts = []

def walk(elem):
    if elem.text and elem.text.strip():
        texts.append(elem.text.strip())
    for child in elem:
        walk(child)
    if elem.tail and elem.tail.strip():
        texts.append(elem.tail.strip())

walk(root)
return texts

使用示例

xml_str = """Python教程

第一段内容。

第二段内容。

""" root = ET.fromstring(xml_str) print(extract_all_text(root))

输出:['Python教程', '第一段内容。', '第二段内容。']

需要保留格式或处理HTML混入时用lxml

若XML含命名空间、CDATA、注释,或你想更精准控制(比如只取“可见文本”,跳过注释/处理指令),lxml更强大:

  • 安装:pip install lxml
  • etree.tostring(elem, method='text', encoding='unicode')可一键提取某元素内所有文本(含子元素),但会合并空格
  • 更精细控制可用itertext()方法:''.join(elem.itertext()) 返回该元素及其后代的所有文本内容(不含标签)

注意事项与常见坑

提取“所有文本”不等于“所有字符串”。需注意:

  • XML注释()、处理指令、DTD声明默认不被ElementTree解析,lxml可通过设置解析器参数捕获
  • texttail可能为None,务必判空再调.strip()
  • 如果XML编码不是UTF-8,解析前需显式指定(如ET.fromstring(xml_bytes, parser=ET.XMLParser(encoding='gbk'))
  • 想获得带换行/缩进的原始文本?需用minidomlxmlpretty_print=False配合手动遍历,但通常不必要


# python  # html  # 编码  # app  # ai  # 标准库 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 北京网站制作公司哪家好一点,北京租房网站有哪些?  Laravel模型关联查询教程_Laravel Eloquent一对多关联写法  Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理  Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】  如何用腾讯建站主机快速创建免费网站?  详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南  Bootstrap整体框架之CSS12栅格系统  javascript中数组(Array)对象和字符串(String)对象的常用方法总结  Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用  Laravel定时任务怎么设置_Laravel Crontab调度器配置  网站建设要注意的标准 促进网站用户好感度!  Laravel如何实现事件和监听器?(Event & Listener实战)  Windows10如何更改计算机工作组_Win10系统属性修改Workgroup  利用vue写todolist单页应用  网页设计与网站制作内容,怎样注册网站?  如何用PHP快速搭建CMS系统?  如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  微信小程序 配置文件详细介绍  Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  JavaScript如何实现类型判断_typeof和instanceof有什么区别  装修招标网站设计制作流程,装修招标流程?  Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】  Android利用动画实现背景逐渐变暗  php json中文编码为null的解决办法  Laravel Docker环境搭建教程_Laravel Sail使用指南  Linux安全能力提升路径_长期防护思维说明【指导】  如何在IIS中配置站点IP、端口及主机头?  Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  微信h5制作网站有哪些,免费微信H5页面制作工具?  教学论文网站制作软件有哪些,写论文用什么软件 ?  如何生成腾讯云建站专用兑换码?  详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点  高性能网站服务器部署指南:稳定运行与安全配置优化方案  Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层  php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】  laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法  bootstrap日历插件datetimepicker使用方法  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】  Laravel如何操作JSON类型的数据库字段?(Eloquent示例)  千库网官网入口推荐 千库网设计创意平台入口  详解阿里云nginx服务器多站点的配置  详解MySQL数据库的安装与密码配置  如何快速搭建二级域名独立网站?  Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道  Android使用GridView实现日历的简单功能