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,但更关键的是要同时收集text和tail:
-
element.text:元素开始标签与第一个子元素(或结束标签)之间的文本 -
element.tail:元素结束标签与下一个兄弟元素开始标签之间的文本(常被忽略!) - 递归遍历时,对每个元素先加
text,再递归子元素,最后加tail
代码示例:安全提取全部可见文本
以下函数会返回去除首尾空白、跳过纯空白节点后的所有文本片段(保留自然断句):
import xml.etree.ElementTree as ETdef 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 = """
""" root = ET.fromstring(xml_str) p Python教程 第一段内容。
第二段内容。
rint(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可通过设置解析器参数捕获 -
text和tail可能为None,务必判空再调.strip() - 如果XML编码不是UTF-8,解析前需显式指定(如
ET.fromstring(xml_bytes, parser=ET.XMLParser(encoding='gbk'))) - 想获得带换行/缩进的原始文本?需用
minidom或lxml的pretty_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实现日历的简单功能


rint(extract_all_text(root))