Loops 使用字符串的前三位来循环和分组输出中的元素

Loops 使用字符串的前三位来循环和分组输出中的元素,loops,xslt,select,xslt-grouping,Loops,Xslt,Select,Xslt Grouping,在下面的xml中,“number”的前三位数字可用于对结果输出中的“number”元素进行分组。但是我不知道怎么做? 请参阅下面的输入XML和我想要的输出 输入 [参见输入和所需输出][1] <data> <InputElemenmts> <Element11> <key>73004</key> <number>001001</number> </Elemen

在下面的xml中,“number”的前三位数字可用于对结果输出中的“number”元素进行分组。但是我不知道怎么做? 请参阅下面的输入XML和我想要的输出

输入 [参见输入和所需输出][1]

<data>
<InputElemenmts>
    <Element11>
        <key>73004</key>
        <number>001001</number>
    </Element11>
    <Element11>
        <key>7300465</key>
        <number>002001</number>
    </Element11>
    <Element11>
        <key>730046</key>
        <number>003001</number>
    </Element11>
    <Element11>
        <key>730046</key>
        <number>003002</number>
    </Element11>
    <Element11>
        <key>730046</key>
        <number>003003</number>
    </Element11>
    <Element11>
        <key>730049</key>
        <number>004001</number>
    </Element11>
    <Element11>
        <key>730046</key>
        <number>005001</number>
    </Element11>
    <Element11>
        <key>730040</key>
        <number>006001</number>
    </Element11>
    <Element11>
        <key>730040</key>
        <number>006002</number>
    </Element11>
    <Element11>
        <key>730041</key>
        <number>007001</number>
    </Element11>
    <Element11>
        <key>730042</key>
        <number>008001</number>
    </Element11>
</InputElemenmts>
<OutputElemenmts>
    <result>
        <key>7300462</key>
        <number>001001</number>
    </result>
    <result>
        <key>7300465</key>
        <number>002001</number>
    </result>
    <result>
        <key>73004</key>
        <Element>
            <number>003001</number>
            <number>003002</number>
            <number>003003</number>
        </Element>
    </result>
    <result>
        <key>730049</key>
        <number>004001</number>
    </result>
    <result>
        <key>730046</key>
        <number>005001</number>
    </result>
    <result>
        <key>730040</key>
        <Element>
            <number>006001</number>
            <number>006002</number>
        </Element>
    </result>
    <result>
        <key>730041</key>
        <number>007001</number>
    </result>
    <result>
        <key>730042</key>
        <number>008001</number>
    </result>
</OutputElemenmts>

73004
001001
7300465
002001
730046
003001
730046
003002
730046
003003
730049
004001
730046
005001
730040
006001
730040
006002
730041
007001
730042
008001
7300462
001001
7300465
002001
73004
003001
003002
003003
730049
004001
730046
005001
730040
006001
006002
730041
007001
730042
008001

这是我所理解的,但可能不是你想要的

<!-- find the last of Element11 with any key -->
    <xsl:template match="Element11[not(following::Element11[key = current()/key])]">
       <result>
        <key><xsl:value-of select="key"/></key>
        <xsl:choose>
         <!-- are there more than one with this key? -->
         <xsl:when test="preceding-sibling::Element11[key = current()/key]">
           <!-- if yes it seems you want an Element wrapper -->
           <Element>
             <xsl:for-each select="preceding-sibling::Element11[key = current()/key]/number">
                <number><xsl:value-of select="."/></number>
             </xsl:for-each>
             <!-- the current one -->
             <number><xsl:value-of select="number"/></number>
           </Element>
         </xsl:when>
         <xsl:otherwise>
             <!-- only the current one -->
             <number><xsl:value-of select="number"/></number>
         </xsl:otherwise>
        </xsl:choose>
       </result>
     </xsl:template>

     <xsl:template match="Element11"/>


欢迎来到SO:-)我们不是代码编写服务。您尝试了什么,代码中的问题在哪里?请编辑你的问题以显示你的努力。嗨,斯蒂芬尼-不幸的是,我没有做太多,因为我不知道怎么做!当我知道的时候,我不在这里!我尝试了一个for-each循环,但我发现我离解决方案还很远,没有什么可以发布的:(我想要什么还不够清楚吗?对我来说很清楚,你想要有人做你的工作……对不起,你误解了SO@henry分组可能是这里最常问的XSLT问题。请先进行搜索,然后在遇到问题时询问特定问题。请注意,XSLT 1.0或2.0的答案不同。