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

Nokogiri解析含<或>的HTML文本丢失内容的解决方法

解决Nokogiri解析含<或>文本时丢失符号的问题

问题原因

XML解析器对语法要求严格,当文本中出现未转义的<或>时,会被误判为标签的起始/结束标记。比如<td>< 109</td>里的<会被当成无效标签的开头,解析器自动修正时会丢弃这个符号,导致最终文本丢失<。

解决方案

1. 改用HTML模式解析(最简便)

HTML解析器容错性更强,能正确识别文本中的未转义<和>:

str = '<td>< 109</td>'
doc = Nokogiri::HTML(str)
puts doc.at('td').text # 输出 "< 109"

2. 预处理字符串转义特殊字符

如果必须使用XML解析,先将文本中的<和>转成XML实体(注意不要转义标签本身的符号):

str = '<td>< 109</td>'
# 仅转义标签外的<和>
escaped_str = str.gsub(/(?<!<)<(?!>)/, '&lt;').gsub(/(?<!<)>(?!>)/, '&gt;')
doc = Nokogiri::XML(escaped_str)
puts doc.at('td').text # 输出 "< 109"

3. 开启XML解析的恢复模式

让Nokogiri在解析XML时尽可能保留原始内容,忽略语法错误:

str = '<td>< 109</td>'
doc = Nokogiri::XML(str) { |cfg| cfg.recover }
puts doc.at('td').content # 输出 "< 109"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 01:15:32