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

如何在XSLT 3.0中修复HTML标记?类似Python的Beautifulsoup、Java的tagsoup

在XSLT 3.0中修复HTML标记及解决parse-xml-fragment报错的方案

一、修复不规范HTML标记的方法

XSLT 3.0本身没有内置HTML修复工具,但可以通过以下方式实现类似BeautifulSoup/TagSoup的功能:

  • 使用支持HTML解析的XSLT处理器:比如Saxon PE/EE版本提供的parse-html()函数,能直接解析不规范的HTML(包括未闭合标签、省略结束标签的元素等),并将其转换为符合XML结构的节点树,后续即可用XSLT正常处理。示例代码:
<xsl:template match="/">
  <!-- 模拟带有未闭合<br>的不规范HTML -->
  <xsl:variable name="invalid-html" select="'<div>Line 1<br>Line 2</div>'" />
  <!-- 解析并修复HTML -->
  <xsl:variable name="fixed-html-tree" select="parse-html($invalid-html)" />
  <!-- 输出修复后的内容 -->
  <xsl:copy-of select="$fixed-html-tree//div" />
</xsl:template>
  • 扩展函数调用外部库:若使用其他处理器,可通过扩展函数调用外部HTML修复库(比如Java环境下调用TagSoup),但这种方式依赖具体的处理器配置和运行环境。

二、解决parse-xml-fragment因未闭合标签报错的问题

parse-xml-fragment()要求输入必须是合法的XML片段,未闭合的<br>属于HTML语法,不符合XML规范,因此会触发错误。解决思路:

  • 优先用HTML解析函数预处理:先用parse-html()将不规范HTML转换为XML兼容的节点树,再从树中提取需要的片段进行处理,而非直接用parse-xml-fragment()处理原始HTML文本。
  • 简单场景下手动修正标签:如果只是少量简单的未闭合标签(如<br>),可以先通过字符串替换将<br>改为<br/>,再传入parse-xml-fragment(),但这种方法仅适用于结构简单的HTML,复杂场景仍需专业解析器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 22:24:56