Функция замены строки xslt 1.0 У меня есть строка "aa:: bb:: aa" и нужно включить его в "aa, bb, aa" Я пробовал translate(string,':',', ') но это возвращает "aa, bb, aa" Как это можно сделать. Ответ 1 Очень простое решение (которое будет работать до тех пор, пока ваше строковое значение не имеет пробелов): translate(normalize-space(translate('aa::bb::cc',':',' ')),' ',',') перевести ":" в "" normalize-space(), чтобы свернуть несколько пробельных символов в одно пространство "" перевод отдельных пространств "в"," Более надежным решением было бы использовать рекурсивный шаблон : <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> Ответ 2 Вы можете использовать этот Синтаксис: - fn:tokenize(string,pattern) Пример: tokenize("XPath is fun", "\s+") Результат: ( "XPath", "is", "fun" )
Ответ 1 Очень простое решение (которое будет работать до тех пор, пока ваше строковое значение не имеет пробелов): translate(normalize-space(translate('aa::bb::cc',':',' ')),' ',',') перевести ":" в "" normalize-space(), чтобы свернуть несколько пробельных символов в одно пространство "" перевод отдельных пространств "в"," Более надежным решением было бы использовать рекурсивный шаблон : <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>
Ответ 2 Вы можете использовать этот Синтаксис: - fn:tokenize(string,pattern) Пример: tokenize("XPath is fun", "\s+") Результат: ( "XPath", "is", "fun" )