Para obtener la secuencia de caracteres que desee de una cadena $str
utilizar el par de funciones string-to-code-points()
y codepoints-to-string()
:
for $c in string-to-codepoints($str)
return
codepoints-to-string($c)
Para llegar esta secuencia de caracteres unida con '/' como cadena de unión, simplemente aplique string-join()
en la expresión anterior.
Aquí es un ejemplo de código completo:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:sequence select=
"string-join(
for $c in string-to-codepoints('ABC')
return
codepoints-to-string($c),
'/'
)
"/>
</xsl:template>
</xsl:stylesheet>
produce la secuencia deseada carácter:
A/B/C
Explicación:
string-to-codepoints($str)
produce una secuencia de puntos de código (piénselos como "códigos de caracteres") que representan cada carácter de la cadena.
Por ejemplo;
string-to-codepoints('ABC')
produce la secuencia de:
65 66 67
codepoints-to-string($code-seq)
es la función inversa de string-to-codepoints()
. Dada una secuencia de puntos de código, produce la cadena, cuyos caracteres están representados por los puntos de código en la secuencia. Por lo tanto:
codepoints-to-string((65,66,67))
produce la cadena:
ABC
Por lo tanto:
for $c in string-to-codepoints($str)
return
codepoints-to-string($c)
obtiene el punto de código de cada carácter individual en $str
y la convierte en una cadena separada.
Usando string-join()
, entonces unimos todas las cadenas separadas usando el carácter de unión proporcionado "/".
Esta solución funciona perfectamente, pero he aceptado la respuesta de FailedDev ya que es más corto y un poco más fácil para las personas (simples) (como yo) para entender –
@TheArtfulBenny: Más fácil de entender ??? Usted debe estar bromeando. –