繁体   English   中英

XSLT-2.0:按节点内容分组

[英]XSLT-2.0: grouping by node content

我们需要对第一列的内容对表行进行分组,然后对组中的每一行进行一定数量的处理。 第一列的内容-数字。 如果列中不包含任何数字,将使用for-each-group

输入示例:

 <table> <tr><td>1</td></tr> <tr><td>2</td></tr> <tr><td>1</td></tr> <tr><td>1,2,3</td></tr> <tr><td>1,4</td></tr> </table> 

根据任务,我应该分为4组:

  • 列中的数字为1:1、3、4、5行;
  • 在第2列和第4行中使用数字2;
  • 数字3:第4;
  • 4:5。

通用模板如下所示:

 <xsl:template match="table"> <xsl:for-each-group select="tr" group-by="td[1]"> <xsl:for-each select="current-group()"> <!-- transformation --> </xsl:for-each> </xsl:for-each-group> </xsl:template> 

因此, group-by = "td [1]"不起作用。
带正则表达式的键...我觉得很难。

听起来好像您要将<xsl:for-each-group select="tr" group-by="td[1]">替换<xsl:for-each-group select="tr" group-by="td[1]"> <xsl:for-each-group select="tr" group-by="tokenize(td[1], ',')">

我想你是在说

  1. 作为输入,您有一个包含行和列的表。
  2. 每行的第一列包含一个用逗号分隔的数字列表。 尽管示例中未显示,但行可能包含其他列。
  3. 作为输出,您希望一组用逗号分隔的数字列表中的每个不同数字值,其中包括在第一列的逗号分隔列表中包含该数字值的行。

从最后一点开始,一行将在其第一列中的逗号分隔列表中的每个数字出现一次,或者在该列表中的每个不同值出现一次(说明不明确)。

我会尝试

<xsl:for-each-group select="tr"
  group-by="tokenize(td[1],',')">
  <xsl:message>Now processing <xsl:value-of 
      select="count(current-group()"/>rows containing <xsl:value-of 
      select="current-grouping-key()"/> in column 1.</
  ...
</

(未经测试。)

如果要输出包含每个组的值的原始行号,我认为您需要将输入转换为另一个包含原始position() 像这样:

<xsl:template match="table">
    <xsl:variable name="row-data">
        <xsl:for-each select="tr/td">
            <xsl:variable name="row" select="position()" />
            <xsl:for-each select="tokenize(., ',')">
                <data>
                <xsl:attribute name="row" select="$row" />
                <xsl:attribute name="value" select="." />
                </data>
            </xsl:for-each>
        </xsl:for-each>
    </xsl:variable>

    <data>
      <xsl:for-each-group select="$row-data/*" group-by="@value"> 
       <group>
            <xsl:attribute name="value" select="@value" />
            <xsl:value-of select="current-group()/@row" separator=","/>
       </group>
      </xsl:for-each-group>
    </data>
</xsl:template>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM