【问题标题】:xslt 2.0 multiple groupingxslt 2.0 多重分组
【发布时间】:2013-11-09 21:48:44
【问题描述】:

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

这里是源 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>

我想使用WeaNrCrossDock 分组

这种情况下的预期结果是 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

只按一个字段分组,比如 WeaNr 很容易:

<xsl:for-each-group select="row" group-by="WeaNr">

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

【问题讨论】:

    标签: xslt grouping xslt-2.0 xslt-grouping


    【解决方案1】:

    你会 group-by 一些字符串,它是两者的组合,例如

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

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

    <xsl:for-each-group select="row" group-by="WeaNr">
      <xsl:for-each-group select="current-group()" group-by="CrossDock">
    

    如果您在 for-each-group 的主体中使用 position() 函数,这两种方法之间的区别就很明显了 - 在 concat 的情况下,您将获得从 1 到 4 的位置值,在嵌套的情况下,您' 将得到 1、2、1、2(因为 position()最近 包围 for-each-group 确定)。同样,last()concat 情况下为 4,在嵌套情况下为 2。

    【讨论】:

    • 另外,当然,current-grouping-key() 在这两种情况下会有所不同。
    猜你喜欢
    • 2021-11-20
    • 2018-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    • 2011-08-08
    • 2021-02-11
    • 2016-02-22
    相关资源
    最近更新 更多