Aby uzyskać żądaną sekwencję znaków z ciągu $str
wykorzystać parę funkcji string-to-code-points()
i codepoints-to-string()
:
for $c in string-to-codepoints($str)
return
codepoints-to-string($c)
Aby dostać ta sekwencja znaków połączona z "/" jako ciągiem łączenia, wystarczy zastosować string-join()
w powyższym wyrażeniu.
Oto pełna przykładowy kod:
<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>
wywołuje żądaną sekwencję znaków:
A/B/C
Objaśnienie:
string-to-codepoints($str)
produkuje sekwencję punkty kodowe (traktuj je jako "kody znaków") reprezentujące każdy znak ciągu.
Na przykład;
string-to-codepoints('ABC')
generuje sekwencję:
65 66 67
codepoints-to-string($code-seq)
ma funkcję odwrotną string-to-codepoints()
. Biorąc pod uwagę sekwencję punktów kodowych, tworzy ciąg znaków, którego znaki są reprezentowane przez współrzędne w sekwencji. Zatem:
codepoints-to-string((65,66,67))
wytwarza ciąg:
ABC
Dlatego:
for $c in string-to-codepoints($str)
return
codepoints-to-string($c)
dostaje kodowy każdego indywidualnego charakteru w $str
i konwertuje go do oddzielnym napisu.
Korzystając z string-join()
, dołączamy do wszystkich takich oddzielnych ciągów, korzystając z dołączonego znaku "/".
To rozwiązanie działa doskonale ale już zaakceptowane jako odpowiedź FailedDev jest krótszy i nieco łatwiej (proste) ludzi (takich jak ja), aby zrozumieć –
@TheArtfulBenny: Łatwiej zrozumieć ??? Musisz żartować. –