在XSLT 2.0中,我有一个长字符串(参数),在分隔符(〜)内有一个分隔符(;),更具体地说是分隔符内的三元组 .
数据组织如下:
<parameter>qrsbfs;qsvsv;tfgz~dknk;fvtea;gtvath~pksdi;ytbdi;oiunhu</parameter>
for-each
中的第一个 tokenize($mystring,'~')
产生:
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
进行密集的字符串操作,但我想知道是否有't a more elegant solution that my neophyte mind wasn'吨可以忽略?
编辑,添加返回错误结果的嵌套标记:
<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>
3 回答
如果您不需要单独对它们进行标记,则可以将
~
替换为;
并同时对所有9个元素进行标记:tokenize(replace(parameter,'~',';'),';')
如果你想要一个单行解决方案,你可以使用嵌套的for-in-return语句做这样的事情:
对于它的 Value ,https://xsltfiddle.liberty-development.net/pPqsHUe中的代码使用
并使用输出方法
text
生成