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

如何让lxml的tostring方法输出自闭合<br/>或成对闭合标签?

解决lxml html模块输出<br>标签格式的问题

两种实现需求的方法

1. 输出自闭合的<br/>

lxml的html.tostring()默认按HTML规范输出,而HTML里<br>是无需闭合的空元素。要强制输出XML/XHTML风格的自闭合标签,只需给tostring()加上method='xml'参数:

from lxml import html
root = html.fromstring('<br/>')
result = html.tostring(root, method='xml')
# 输出: b'<br/>',转字符串可加.decode()

2. 输出成对的<br></br>

如果想要得到类似<a></a>的成对标签格式,不要用html模块解析,改用lxml.etree(XML解析器),因为XML会把所有自闭合标签转换为成对形式:

from lxml import etree
root = etree.fromstring('<br/>')
result = etree.tostring(root)
# 输出: b'<br></br>'

原因说明

lxml的html模块严格遵循HTML规范,其中<br>属于**空元素(void elements)**范畴,这类元素在HTML语法里不需要闭合标签,所以默认tostring()会输出<br>;而<a>是常规容器元素,即使输入是自闭合写法,也会被自动转换为成对标签。

源码相关位置

  • 定义HTML空元素的集合在lxml的html/defs.py文件中,变量名为void_elements,里面包含了br、img、input等所有HTML标准空元素。
  • 在tostring的处理逻辑中(对应html/Element.py或底层序列化代码),当指定method='html'时,会检查当前元素是否在void_elements中,若是则按单标签格式输出;切换为method='xml'时,会跳过这个检查,采用XML的序列化规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 22:25:20