XSLT合并XML数据出现转义特殊字符问题咨询
问题原因排查与解决
核心原因:双重转义导致的字符异常
你看到的</p><p>这类内容,本质是双重转义问题:
- 输入XML中的绩效反馈内容已经是转义后的形式(比如原始
<p>标签被转成了<p>) - 你的XSLT在合并输出时,处理器默认会对文本中的特殊字符(如
&)再次转义,于是原本的<被二次转义为&lt;,最终出现了这种异常格式。
另外还要确认你的合并方式:如果使用xsl:value-of直接输出分组内容,或者用concat()/string-join()拼接文本,XSLT处理器都会自动对特殊字符进行转义,加剧这个问题。
针对性解决办法(基于XSLT 2.0)
方法1:关闭输出转义(快速处理)
如果你的合并逻辑是用xsl:value-of输出,添加disable-output-escaping="yes"属性,阻止处理器对已转义的字符再次编码:
<PSQ2> <xsl:value-of select="your-grouped-feedback-content" disable-output-escaping="yes"/> </PSQ2>
注:该属性的支持度依赖XSLT处理器,主流处理器(如Saxon)均支持,部分轻量处理器可能不兼容。
方法2:解析转义片段(更可靠)
利用XSLT 2.0的parse-xml-fragment函数,先将转义后的文本解析为XML/HTML节点,再输出内容:
<PSQ2> <xsl:copy-of select="parse-xml-fragment(your-grouped-feedback-content)"/> </PSQ2>
如果只需要纯文本(不需要保留HTML标签),可以进一步提取文本内容:
<PSQ2> <xsl:value-of select="string(parse-xml-fragment(your-grouped-feedback-content))"/> </PSQ2>
这个方法不仅能还原转义字符,还能确保内容的结构合法性,是XSLT 2.0下的最优方案。
额外检查项
- 确认输入XML的原始内容:如果上游数据已经把HTML标签转义成了
<p>,那问题根源在数据生成环节,也可以从源头修正输入格式。 - 检查分组拼接逻辑:如果用
string-join()合并多个反馈条目,先对每个条目做转义还原,再拼接,避免拼接后再处理导致的异常。
内容的提问来源于stack exchange,提问作者Buddi
相关产品推荐
相关产品推荐

