您已将CDATA应用于xml中的节点,所有<
和>
都替换为<
和>
。我想将"
替换为"
。
我需要对CDATA部分进行哪些更改才能将"
替换为"
答案 0 :(得分:1)
你没有说清楚你在做什么,所以很难简单回答。
如果你的意思是那个
lt
和gt
,其中输入具有尖括号(因此<p class="greeting">Hello, world</p>
变为{{ 1}},这就是你想要的; <p class="greeting">Hello, world!</p>
然后实现目标的一种方法是编写一个模板来处理文本节点,测试是否存在“,将文本节点分成左边和右边的第一个“,写出左边的部分,写出一个&符号,写出quot
,然后用字符串的右边部分递归调用自己。
以下样式表说明了模式:
quot;
我们可以将它应用于以下输入以查看结果:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="doc">
<xsl:element name="doc">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
<xsl:template match="text()" name="escape-quot">
<xsl:param name="s" select="."/>
<xsl:choose>
<xsl:when test="contains($s,'"')">
<xsl:variable name="sL"
select="substring-before($s,'"')"/>
<xsl:variable name="sR"
select="substring-after($s,'"')"/>
<xsl:value-of select="$sL"/>
<xsl:text>&quot;</xsl:text>
<xsl:call-template name="escape-quot">
<xsl:with-param name="s" select="$sR"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$s"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
我得出的结果是,我猜想,你在寻找什么。
<doc>Hi. This is a test.
<![CDATA[<p class="greeting">Hello,
world!</p>]]>
</doc>
如果那不是您想要的,您可以尝试更详细地解释您的问题。在这种情况下提供(a)当前代码的关键位,(b)样本输入,(c)您当前获得的输出样本,以及对其错误的描述总是一个好主意。 ,和(d)您希望输出看起来像什么的样本。 (保持样本和代码简短 - 您希望提供尽可能小的完整工作示例,以便读者可以重新创建您的问题。)