Какой лучший (более быстрый) способ сделать замену в xslt - PullRequest
1 голос
/ 17 июня 2011

Какой лучший (более быстрый) способ сделать замену в 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 ]

3 голосов
/ 17 июня 2011

Вопросы производительности зависят от того, какой продукт вы используете.Собственный код почти наверняка будет быстрее, но на некоторых процессорах накладные расходы на вызов функции расширения высоки.Так что замерь.

Или переключись на XSLT 2.0.

0 голосов
/ 17 июня 2011

Чтобы напрямую ответить на ваш вопрос, я ожидаю, что метод манипуляции со строками превзойдет XML-манипуляцию из-за того, что нет необходимости анализировать XML-документ.

Однако вы должны подумать, хотите ли вы, чтобы ваша замена была чувствительнойк природе XML документа или нет.Т.е. вы просто хотите:

  1. Изменить текст документа, заменив одну строку другой, независимо от того, происходит ли это в имени элемента, текстовом узле, комментарии и т. Д.Замена строки, если ее тщательно не контролировать, может также привести к неверному результирующему документу, например, замена строки с <hello> на <there> изменит начальный элемент <hello>, но не закрывающий элемент </there>.
  2. Изменение XML с учетом контекста, позволяющее точно изменять конкретные элементы, атрибуты или тексты, не разрушая структуру документа.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...