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

XSL转换过程中如何对sect实体进行反转义?

解决XSLT处理§实体时的解析错误

问题根源

XML解析器仅默认支持&、<、>、"、'这五个预定义实体,§不在此范围内。你的输入XML直接使用了§但未提前声明该实体,因此触发了SXXP0003解析错误。

可行解决方案

方案1:给输入XML添加实体声明

在输入XML的根元素前添加DOCTYPE声明,明确定义sect实体:

<!DOCTYPE 你的根元素名 [
  <!ENTITY sect "&#x00A7;">
]>

示例(假设根元素为doc):

<!DOCTYPE doc [
  <!ENTITY sect "&#x00A7;">
]>
<doc>
  <!-- 你的XML内容 -->
</doc>

添加后XML解析器就能识别&sect;实体,XSLT的字符映射可正常工作。

方案2:修改XSLT字符映射,直接使用Unicode值

将XSLT字符映射中的&sect;替换为对应的Unicode十六进制值&#xA7;,修改后的字符映射代码如下:

<xsl:character-map name="mdash">
  <xsl:output-character character="&#x2014;" string="&amp;mdash;"/>
  <xsl:output-character character="&amp;" string="&amp;amp;" />
  <xsl:output-character character="&quot;" string="&amp;quot;" />
  <xsl:output-character character="&amp;apos;" string="&amp;amp;apos;" />
  <xsl:output-character character="&#xA7;" string="&amp;sect;" />
</xsl:character-map>

修改后XSLT会直接匹配§字符(对应&#xA7;),输出为&amp;sect;,最终生成的XML里会保留&sect;实体,同时避免解析错误。

方案3:将输入当作纯文本处理(适用于特殊场景)

若无法修改输入XML且不想添加实体声明,可使用XSLT的unparsed-text()函数读取输入文件为纯文本,再用replace()函数替换目标字符:

<xsl:template match="/">
  <xsl:variable name="text" select="unparsed-text('你的输入文件路径.xml')"/>
  <xsl:variable name="processed-text" select="replace($text, '§', '&amp;sect;')"/>
  <!-- 可添加其他实体的替换逻辑,比如处理&、"等 -->
  <xsl:value-of select="$processed-text" disable-output-escaping="yes"/>
</xsl:template>

此方法适合输入格式不严格的场景,但需手动处理所有需要保留的实体,复杂度较高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 04:49:56