Azure APIM中如何将XML字符串的&替换为&
解决XSLT转换时XML未转义&字符报错的自动处理方案
问题根因
你收到的报错是因为&是XML预留的实体起始字符,未转义为&的情况下,XML解析器会认为后续字符是实体名称,找不到对应的;结束符就会触发语法错误。
自动处理方案
你可以直接在set-body赋值阶段完成字符转义,有两种可选方案:
方案1:针对性替换&字符
如果你的XML字符串中仅&未转义,其余标签的<、>等都已经是合法XML格式,直接做字符串替换即可,避免破坏原有合法转义序列:
<set-body>@(((String)context.Variables["XML_STRING"]).Replace("&", "&"))</set-body> <xsl-transform> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output omit-xml-declaration="yes" indent="yes" /> <xsl:template match="/"> <xsl:copy-of select="A" /> </xsl:template> </xsl:stylesheet> </xsl-transform>
方案2:全量XML实体转义
如果你的XML字符串是原始未处理的纯文本,还有其他可能未转义的XML预留字符(<、>、"、'),可以用.NET内置的转义工具一次性处理所有字符,更稳妥:
<set-body>@(System.Net.WebUtility.HtmlEncode((String)context.Variables["XML_STRING"]))</set-body> <!-- 后续xsl-transform逻辑保持不变 -->
注意:该方案会把所有XML预留字符都做转义,如果原有字符串中已经存在合法的转义序列(比如已经写好的
<),会被二次转义为&lt;,请根据你的XML字符串实际情况选择方案。
内容的提问来源于stack exchange,提问作者Rishav Raj
相关产品推荐
相关产品推荐

