我有一个XSL,我用它来将一个XML转换为另一个XML,如:
<xsl:value-of select="somestatement"/>
其中一些语句有单引号和双引号。例如:这是一个“示例”字符串。我有'单引号'
我想用'
替换单引号,用"
替换双引号,以便输出字符串为:
This is an "example" string. I have 'single quotes'
有人可以为此建议解决方案吗?
感谢您的帮助。
答案 0 :(得分:2)
您需要为此调用命名的递归模板。尝试:
<xsl:template name="escape-quotes">
<xsl:param name="text"/>
<xsl:param name="searchString">'</xsl:param>
<xsl:param name="replaceString">&apos;</xsl:param>
<xsl:variable name="apos">'</xsl:variable>
<xsl:choose>
<xsl:when test="contains($text,$searchString)">
<xsl:call-template name="escape-quotes">
<xsl:with-param name="text" select="concat(substring-before($text,$searchString), $replaceString, substring-after($text,$searchString))"/>
<xsl:with-param name="searchString" select="$searchString"/>
<xsl:with-param name="replaceString" select="$replaceString"/>
</xsl:call-template>
</xsl:when>
<xsl:when test="$searchString=$apos">
<xsl:call-template name="escape-quotes">
<xsl:with-param name="text" select="$text"/>
<xsl:with-param name="searchString">"</xsl:with-param>
<xsl:with-param name="replaceString">&quot;</xsl:with-param>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$text" disable-output-escaping="yes"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
调用模板的示例:
<output>
<xsl:call-template name="escape-quotes">
<xsl:with-param name="text">This is an "example" string. I have 'single quotes'.</xsl:with-param>
</xsl:call-template>
</output>
结果:
<output>This is an "example" string. I have 'single quotes'.</output>