首页 文章

XSLT 2.0令牌分隔符中的分隔符

提问于
浏览
0

在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

我可以使用 concatstring-lengthsubstring-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 回答

  • 1

    如果您不需要单独对它们进行标记,则可以将 ~ 替换为 ; 并同时对所有9个元素进行标记:

    tokenize(replace(parameter,'~',';'),';')

  • 0

    如果你想要一个单行解决方案,你可以使用嵌套的for-in-return语句做这样的事情:

    <xsl:sequence select="for $n in tokenize(.,'~') return concat(string-join(tokenize($n,';'),'&#xa;'),'&#xa;&#xa;')"/>
    
  • 0

    对于它的 Value ,https://xsltfiddle.liberty-development.net/pPqsHUe中的代码使用

    <xsl:template match="parameter">
          <xsl:for-each select="tokenize(., '~')">
              <xsl:value-of select="tokenize(., ';')" separator="&#10;"/>
              <xsl:text>&#10;&#10;</xsl:text>
          </xsl:for-each>
      </xsl:template>
    

    并使用输出方法 text 生成

    qrsbfs
    qsvsv
    tfgz
    
    dknk
    fvtea
    gtvath
    
    pksdi
    ytbdi
    oiunhu
    

相关问题