【问题标题】:Value in CDATA tag not being displayed in XSL file?XSL 文件中未显示 CDATA 标记中的值?
【发布时间】:2020-10-24 19:10:34
【问题描述】:

我想将动态生成的一段文本中的& 符号替换为其编码值%26,以防止它破坏URL 字符串。我将文本存储在 hrefvalue 变量中。我的目标是将& 替换为%26,以便在浏览器的最终HTML 代码中输出。

例如: “听力和理解”应该变成“听力 %26 理解”

我正在使用<![CDATA[ 来保留%26,但这似乎不起作用。我仍然在浏览器中得到“聆听和理解”。为什么?

                            <xsl:variable name="hrefvalue" select="./node()" />
                            <xsl:choose>
                                <xsl:when test="contains($hrefvalue, '&amp;')">
                                    <xsl:variable name="string-before" select="substring-before($hrefvalue, '&amp;')" />
                                    <xsl:variable name="string-after" select="substring-after($hrefvalue, '&amp;')" />
                                    <xsl:variable name="ampersand"><![CDATA[%26]]></xsl:variable>
                                    <xsl:value-of select="concat($string-before, $ampersand, $string-after)" disable-output-escaping="yes" />
                                </xsl:when>
                                <xsl:otherwise>
                                    <xsl:value-of select="$hrefvalue" disable-output-escaping="no" />
                                </xsl:otherwise>
                            </xsl:choose>

我正在开发一个使用 XSL 1.0 的系统

【问题讨论】:

    标签: html xml xslt xslt-1.0


    【解决方案1】:

    首先,CDATA 完全没有必要且无关紧要。 CDATA 的唯一目的是允许写入 &amp;&lt; 而无需转义,如果这些特殊字符不存在,则 CDATA 标记没有任何区别。

    此外,如果您正在生成一个属性(如果它是一个 URL,这似乎很可能),那么 disable-output-escaping 无效。但同样,它可能不需要。

    您的代码只处理字符串中的一个 & 符号。

    但是您的代码看起来不错。如果有问题,那是您没有向我们展示的代码部分。尝试构建一个完整的可重现示例:一个完整​​的样式表和源文档,我们可以实际运行以查看是否可以重现问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多