В XSLT 2.0 у меня есть длинная строка (параметр) с разделителем (;) внутри разделителя (~), более конкретно, триплет внутри разделителя.
Данные организованы так:
<parameter>qrsbfs;qsvsv;tfgz~dknk;fvtea;gtvath~pksdi;ytbdi;oiunhu</parameter>
Первый tokenize($mystring,'~')
в for-each
производит:
qrsbfs;qsvsv;tfgz
dknk;fvtea;gtvath
pksdi;ytbdi;oiunhu
В этом токенизации мне нужно обработать его, повторив цикл:
qrsbfs
qsvsv
tfgz
dknk
fvtea
gtvath
pksdi
ytbdi
oiunhu
Я могу выполнять интенсивные манипуляции со строками, чтобы добраться туда, используя concat
, string-length
и substring-before
/ substring-after
, но мне было интересно, не было ли более изящного решения, чем мой разум неофита?пропускает?
РЕДАКТИРОВАТЬ, добавляя вложенный токен, который дал неверные результаты:
<xsl:for-each select="tokenize($myparameter,'~')">
<xsl:for-each select="tokenize(.,';')">
<xsl:if test="position()=1">
<xsl:value-of select="."/>
</xsl:if>
<xsl:if test="position()=2">
<xsl:value-of select="."/>
</xsl:if>
<xsl:if test="position()=3">
<xsl:value-of select="."/>
</xsl:if>
</xsl:for-each>
</xsl:for-each>