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

如何阻止HXT在String与XMLTree转换时将<转为<?

解决HXT解析XML时转义内容被还原的问题

要阻止HXT自动把转义字符还原成原始符号,核心是别让它把文本节点的内容当XML解析,得保留原始的转义字符串。下面是具体的解决办法:

1. 用xtext代替xshow提取文本

xshow会触发XML序列化,自动把&lt;转成<。换成xtext直接取文本节点的原始字符串,它不会处理转义:

-- 示例:提取目标文本的原始内容
extractRawText :: ArrowXml a => a XmlTree String
extractRawText = xpath "//mytag/attribute[contains(@type,\"somethingIRecognize\")]/text()" >>> xtext

2. 加载XML时禁用实体展开

在读取XML字符串的时候,加上withNoEntityExpansion配置,让HXT别自动展开实体引用:

import Text.XML.HXT.Core

loadRawXml :: String -> IOStateArrow s b XmlTree
loadRawXml xmlStr = readString [withNoEntityExpansion, withValidate no] xmlStr

这个配置是关键,能直接阻止HXT把&lt;这类实体转换成<。

3. 保留错误HTML的原始内容

如果子内容有语法错误的HTML(比如没闭合的</b>),只要全程以原始字符串形式存储和传递,别碰任何解析HTML的函数,就能完整保留原样。别触发任何XML/HTML解析逻辑就行。

测试示例

假设输入XML是:

<mytags>
  <mytag>
    <attribute type="somethingIRecognize">&lt;b&gt;text1&lt;/b&gt;</attribute>
  </mytag>
</mytags>

用上面的方法查询后,得到的就是原始的&lt;b&gt;text1&lt;/b&gt;,不会被转成<b>text1</b>。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 21:59:54