我正在编写一个xslt模板,它需要为xml站点地图输出一个有效的xml文件。
<url>
<loc>
<xsl:value-of select="umbraco.library:NiceUrl($node/@id)"/>
</loc>
<lastmod>
<xsl:value-of select="concat($node/@updateDate,'+00:00')"/>
</lastmod>
</url>
不幸的是,输出的url包含一个撇号-/what's-new.aspx
我需要从google站点地图的“to
'
中退出。不幸的是,我尝试过的每一次尝试都将字符串“'
”视为无效-令人沮丧。xslt有时会让我发疯。对一种技术有什么想法吗?(假设我可以找到xslt 1.0模板和函数的方法)
最佳答案
所以输入中有'
,但输出中需要字符串
?
在xsl文件中,使用this find/replace implementation将'
替换为&apos;
(除非您使用的是xslt 2.0):
<xsl:template name="string-replace-all">
<xsl:param name="text"/>
<xsl:param name="replace"/>
<xsl:param name="by"/>
<xsl:choose>
<xsl:when test="contains($text,$replace)">
<xsl:value-of select="substring-before($text,$replace)"/>
<xsl:value-of select="$by"/>
<xsl:call-template name="string-replace-all">
<xsl:with-param name="text" select="substring-after($text,$replace)"/>
<xsl:with-param name="replace" select="$replace"/>
<xsl:with-param name="by" select="$by"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$text"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
这样称呼:
<loc>
<xsl:call-template name="string-replace-all">
<xsl:with-param name="text" select="umbraco.library:NiceUrl($node/@id)"/>
<xsl:with-param name="replace" select="'"/>
<xsl:with-param name="by" select="&apos;"/>
</xsl:call-template>
</loc>
问题是
'
被xsl解释为'
。&apos;
将被解释为'
。关于xml - XSLT-用输出中的转义文本替换撇号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1103205/