Để có được chuỗi ký tự mong muốn từ một chuỗi $str
sử dụng cặp chức năng string-to-code-points()
và codepoints-to-string()
:
for $c in string-to-codepoints($str)
return
codepoints-to-string($c)
Để có được chuỗi ký tự này được nối với '/' làm chuỗi tham gia, chỉ cần áp dụng string-join()
trên biểu thức ở trên.
Dưới đây là một mã đầy đủ ví dụ:
<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>
tạo ra nhân vật chuỗi truy nã:
A/B/C
Giải thích:
string-to-codepoints($str)
tạo ra một chuỗi các mã-điểm (nghĩ về chúng như là "mã ký tự") đại diện cho mỗi ký tự của chuỗi.
Ví dụ:;
string-to-codepoints('ABC')
tạo ra chuỗi:
65 66 67
codepoints-to-string($code-seq)
là hàm nghịch đảo của string-to-codepoints()
. Với một chuỗi các điểm mã, nó tạo ra chuỗi ký tự, có các ký tự được biểu diễn bằng các điểm mã trong dãy. Như vậy:
codepoints-to-string((65,66,67))
tạo ra chuỗi:
ABC
Do đó:
for $c in string-to-codepoints($str)
return
codepoints-to-string($c)
nhận được điểm mã của mỗi nhân vật cá nhân trong $str
và chuyển đổi nó vào một riêng chuỗi.
Sử dụng string-join()
chúng tôi sau đó tham gia tất cả các chuỗi riêng biệt bằng cách sử dụng ký tự liên kết được cung cấp "/".
Nguồn
2011-12-06 13:13:34
Giải pháp này hoạt động hoàn hảo nhưng tôi đã chấp nhận câu trả lời FailedDev như nó ngắn và hơi dễ dàng hơn cho (đơn giản) người (như tôi) để hiểu –
@TheArtfulBenny: Dễ hiểu ??? Bạn * phải * nói đùa. –