在xslt中进行替换的最佳(更快)方法是什么?
1 /使用模板
<xsl:template name="str-replace">
<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="str-replace">
<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>
2 /使用扩展程序对象
public class ToolBox
{
public string replace(string s, string el, string by)
{return s.Replace(el, by);}
}
<xsl:value-of select="toolbox:replace($foo,$bar, $fobar)" />
答案 0 :(得分:3)
性能问题取决于您了解所使用的产品。本机代码几乎肯定会更快,但在某些处理器上调用扩展函数的开销很高。所以衡量它。
或切换到XSLT 2.0。
答案 1 :(得分:0)
要直接回答你的问题,我希望字符串操作方法优于XML操作,因为它不必解析XML文档。
但是,您应该考虑是否希望您的替换者对文档的XML特性敏感。即你只是想:
<hello>
到<there>
的字符串替换会改变起始<hello>
元素,但不会改变结束</there>
元素。