Как мне сделать str: replace в XSLT / XPATH 1.0? - PullRequest
3 голосов
/ 06 октября 2011

В XPATH 2.0 есть функция, которая позволяет мне заменить подстроку в строке другой строкой. Я хотел бы сделать это с помощью ксалана. К сожалению, он не поддерживает метод EXSLT str: replace и использует только таблицы стилей XSLT 1.0. Включение функции из exslt.org, похоже, не работает. Если я пытаюсь использовать стиль функции, он жалуется, что не может найти str: replace. Если я пытаюсь использовать стиль шаблона, он жалуется, что не может найти набор узлов, даже если он поддерживается. Перевести бесполезно, так как это просто замена персонажа. Есть идеи?

1 Ответ

3 голосов
/ 06 октября 2011

Вы можете написать свою собственную функцию, которая может заменить им xslt 2.0:

<xsl:template name="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="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>

Если вы называете это так:

<xsl:variable name="replacedString">
<xsl:call-template name="replace">
  <xsl:with-param name="text" select="'This'" />
  <xsl:with-param name="replace" select="'This'" />
  <xsl:with-param name="by" select="'That'" />
</xsl:call-template>

Ваш полученный $replaceString будет иметь значение «That»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...