Функция замены строки xslt 1.0 - PullRequest
       8

Функция замены строки xslt 1.0

20 голосов
/ 23 сентября 2011

У меня есть строка "aa :: bb :: aa"

и нужно включить его в "аа, бб, аа"

Я пытался

translate(string,':',', ')

но это возвращает "аа ,, бб ,, аа"

Как это можно сделать.

Ответы [ 2 ]

68 голосов
/ 23 сентября 2011

Очень простое решение (оно будет работать до тех пор, пока у вашего строкового значения нет пробелов):

translate(normalize-space(translate('aa::bb::cc',':',' ')),' ',',')
  1. перевести ": 'в" "
  2. normalize-space(), чтобы свернуть несколько пробельных символов в один пробел ""
  3. переводить пробелы "" в ","

Более надежным решением было бы использование рекурсивного шаблона :

<xsl:template name="replace-string">
    <xsl:param name="text"/>
    <xsl:param name="replace"/>
    <xsl:param name="with"/>
    <xsl:choose>
      <xsl:when test="contains($text,$replace)">
        <xsl:value-of select="substring-before($text,$replace)"/>
        <xsl:value-of select="$with"/>
        <xsl:call-template name="replace-string">
          <xsl:with-param name="text"
select="substring-after($text,$replace)"/>
          <xsl:with-param name="replace" select="$replace"/>
          <xsl:with-param name="with" select="$with"/>
        </xsl:call-template>
      </xsl:when>
      <xsl:otherwise>
        <xsl:value-of select="$text"/>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

Вы можете использовать его так:

<xsl:call-template name="replace-string">
  <xsl:with-param name="text" select="'aa::bb::cc'"/>
  <xsl:with-param name="replace" select="'::'" />
  <xsl:with-param name="with" select="','"/>
</xsl:call-template>
0 голосов
/ 09 декабря 2016

Вы можете использовать это

Синтаксис: - fn:tokenize(string,pattern)

Пример: tokenize("XPath is fun", "\s+")
Результат: ("XPath", "is", "fun")

...