0

0

Python如何处理自闭合标签 的解析

幻夢星雲

幻夢星雲

发布时间:2025-12-26 03:49:17

|

781人浏览过

|

来源于php中文网

原创

Python解析器不将视为自闭合标签,而是解析为含空文本的双标签元素;真正的自闭合标签是;判断逻辑为空需手动检查text、tail和子元素数量。

python如何处理自闭合标签 <tag/> 的解析

Python 中的 XML/HTML 解析器(如 xml.etree.ElementTreelxmlBeautifulSoup)**不把 当作自闭合标签处理,而是当作普通开始+结束标签**,即包含一个空文本子节点的元素。真正的自闭合标签是像 这样的写法。

ElementTree 默认行为:空标签 ≠ 自闭合

xml.etree.ElementTree 会把 解析为一个有开始和结束标签的普通元素,其 .textNone 或空字符串(取决于解析方式),但结构上仍是双标签。它不会自动合并或重写为

  • 如果原始 XML 是 ,解析后 elem.text 通常是 None(若标签间无空白)或 '\n '(若有缩进)
  • elem.tag'item'len(list(elem))0,表示无子元素
  • 要判断是否“逻辑上为空”,需手动检查:not elem.text and not elem.tail and len(elem) == 0

lxml 支持输出自闭合形式(可选)

lxml.etree 在序列化时可通过 method='xml'xml_declaration=True 输出标准 XML,并支持 selfclosing_tags 参数(仅限写入时控制格式):

  • 默认情况下,etree.tostring(elem) 对空元素仍输出
  • 若希望输出 ,需在创建元素时用 etree.Element('tag', **{'/': ''})(不推荐)或使用 etree.tostring(..., method='xml', xml_declaration=False) 并配合 etree.XMLParser(remove_blank_text=True) 预处理
  • 更稳妥的做法是:解析后识别空元素,再用字符串替换或自定义序列化逻辑统一转为自闭合形式

BeautifulSoup 处理更宽松,但不区分语义

BeautifulSoup(尤其搭配 html.parserlxml 解析器)会把 都视为同一元素,且默认输出时倾向于用双标签形式。

小艺
小艺

华为公司推出的AI智能助手

下载

立即学习Python免费学习笔记(深入)”;

  • 它不保留原始标签语法差异,只关注 DOM 结构
  • 若需输出自闭合格式,可用 soup.prettify(formatter=lambda s: s.strip() if s.strip() else '') 辅助,但无法直接强制所有空标签变 />
  • 对 HTML,部分标签如 Python如何处理自闭合标签  的解析
    在解析时会被自动标准化为自闭合(取决于解析器和文档类型)

实际建议:按需判断,而非依赖解析器自动转换

大多数场景下,你不需要“修复”标签形式,而应关注内容逻辑。若必须统一为自闭合格式(如生成配置文件、对接严格 XML Schema):

  • 先遍历所有元素,用条件 not elem.text and not elem.tail and len(elem) == 0 and not elem.attrib 找出纯空元素
  • lxmletree.tostring() + 正则替换,或改用 xml.dom.minidom(支持 toxml() 中的 selfClosingTags 参数)
  • 注意:XML 规范中 完全等价,除非下游系统有特殊要求,否则无需强求格式一致

相关专题

更多
python开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

707

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

625

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

735

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

616

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1234

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

547

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

573

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

695

2023.08.11

笔记本电脑卡反应很慢处理方法汇总
笔记本电脑卡反应很慢处理方法汇总

本专题整合了笔记本电脑卡反应慢解决方法,阅读专题下面的文章了解更多详细内容。

1

2025.12.25

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 0.6万人学习

Django 教程
Django 教程

共28课时 | 2.4万人学习

SciPy 教程
SciPy 教程

共10课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号