xslt 2.0多重分组

Vex*_*toR 3 xslt grouping xslt-2.0 xslt-grouping

我的问题:我如何应用双重(或多重)分组?

这是源XML:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<root>
    <row>
        <Type>1</Type>
        <WeaNr>100519</WeaNr>
    </row>
    <row>
        <Type>2</Type>
        <WeaNr>100519</WeaNr>
        <ETADC_SKU>2007925</ETADC_SKU>
        <CrossDock>N</CrossDock>
    </row>
    <row>
        <Type>2</Type>
        <WeaNr>100519</WeaNr>
        <ETADC_SKU>12007925</ETADC_SKU>
        <CrossDock>N</CrossDock>
    </row>
    <row>
        <Type>2</Type>
        <WeaNr>100519</WeaNr>
        <ETADC_SKU>200792ww5</ETADC_SKU>
        <CrossDock>Y</CrossDock>
    </row>
    <row>
        <Type>1</Type>
        <WeaNr>100520</WeaNr>
    </row>
    <row>
        <Type>2</Type>
        <WeaNr>100520</WeaNr>
        <ETADC_SKU>2007925444</ETADC_SKU>
        <CrossDock>N</CrossDock>
    </row>
    <row>
        <Type>2</Type>
        <WeaNr>100520</WeaNr>
        <ETADC_SKU>2007925333</ETADC_SKU>
        <CrossDock>Y</CrossDock>
    </row>
    <row>
        <Type>2</Type>
        <WeaNr>100520</WeaNr>
        <ETADC_SKU>204445333</ETADC_SKU>
        <CrossDock>Y</CrossDock>
    </row>
</root>
Run Code Online (Sandbox Code Playgroud)

我想用WeaNr和分组CrossDock

本案例中的预期结果为4组:

1. WeaNr=100519 and CrossDock=N
2. WeaNr=100519 and CrossDock=Y
3. WeaNr=100520 and CrossDock=N
4. WeaNr=100520 and CrossDock=Y
Run Code Online (Sandbox Code Playgroud)

只需一个字段进行分组,就像WeaNr一样简单:

<xsl:for-each-group select="row" group-by="WeaNr">
Run Code Online (Sandbox Code Playgroud)

那么我该如何应用双(或多个)分组?

Ian*_*rts 10

例如,您可以group-by使用两者的组合字符串

<xsl:for-each-group select="row" group-by="concat(WeaNr, '|', CrossDock)">
Run Code Online (Sandbox Code Playgroud)

或者使用两个嵌套级别的 for-each-group

<xsl:for-each-group select="row" group-by="WeaNr">
  <xsl:for-each-group select="current-group()" group-by="CrossDock">
Run Code Online (Sandbox Code Playgroud)

如果使用这两种方法之间的差异是明显的position()功能中的所述主体for-each-group中的- concat的情况下,你会得到的位置值从1到4,在巢式病例你将得到1,2,1,2(因为在position()由所确定的最近的封闭for-each-group).同样,last()concat案例中将为4,在嵌套情况下为2.