首页 > 解决方案 > 如何拆分字符串并删除重复和连接字符串的第二部分

问题描述

我试图在 XSLT 中拆分以下字符串并删除重复项并以下列方式连接字符串的第二部分。

<items>Vegetable|tomoto|,vegetable|potato,fruit|apple,fruit|orange,fruit|kiwi</items>

我可以用“,”和“|”分割 并创建单独的标签,但我需要通过删除重复的“蔬菜”和“水果”来创建具有以下格式的 xml

预期结果

<category>vegetables</category>
<subcategory>tomoto,potato</subcategory>
<category>fruits</category>
<subcategory>apple,orange,kiwi</subcategory>

谢谢拉胡尔人力资源

标签: xmlxslt

解决方案


假设您的输入实际上看起来更像:

<items>vegetable|tomato,vegetable|potato,fruit|apple,fruit|orange,fruit|kiwi</items>

(即使用相同的字母大小写列出的所有类别,并且没有多余的分隔符)并且您的处理器支持 XSLT 2.0,您可以使用以下方法获得预期结果:

<xsl:for-each-group select="tokenize(items, ',')" group-by="substring-before(., '|')">
    <category>
        <xsl:value-of select="current-grouping-key()"/>
    </category>
     <subcategory>
        <xsl:value-of select="for $str in current-group() return substring-after($str, '|')" separator=","/>
    </subcategory>
</xsl:for-each-group>

或者,如果您愿意:

<xsl:variable name="items">
    <xsl:for-each select="tokenize(items, ',')">
        <item cat="{substring-before(., '|')}">
            <xsl:value-of select="substring-after(., '|')"/>
        </item>
    </xsl:for-each>
</xsl:variable>
<xsl:for-each-group select="$items/item" group-by="@cat">
    <category>
        <xsl:value-of select="current-grouping-key()"/>
    </category>
    <subcategory>
        <xsl:value-of select="current-group()" separator=","/>
    </subcategory>
</xsl:for-each-group>

请注意,结果不会将类别和子类别组合在一起。


推荐阅读