在xslt中替换的最佳(更快)方法是什么?

时间:2011-06-17 10:05:16

标签: c# xml xslt

在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)" />

2 个答案:

答案 0 :(得分:3)

性能问题取决于您了解所使用的产品。本机代码几乎肯定会更快,但在某些处理器上调用扩展函数的开销很高。所以衡量它。

或切换到XSLT 2.0。

答案 1 :(得分:0)

要直接回答你的问题,我希望字符串操作方法优于XML操作,因为它不必解析XML文档。

但是,您应该考虑是否希望您的替换者对文档的XML特性敏感。即你只是想:

  1. 更改文档的文本,将一个字符串替换为另一个字符串,而不管这是否出现在元素名称,文本节点,注释和&amp; c中。如果不仔细控制字符串替换,也可能导致无效的结果文档,例如, <hello><there>的字符串替换会改变起始<hello>元素,但不会改变结束</there>元素。
  2. 以上下文敏感的方式更改XML,允许对特定元素,属性或文本进行精确更改,而不会破坏文档结构。