xsl-list
[Top] [All Lists]

Re: [xsl] Question on streaming and grouping with nested keys

2017-07-14 03:05:50


Am 14.07.2017 um 09:09 schrieb Felix Sasaki felix(_at_)sasakiatcf(_dot_)com:

I want to analyse a list of transactions in XSLT 3.0 streaming mode. Transactions should be grouped by a key which is nested inside each transaction (see SUBITEM2.2/GROUPING-KEY below). For the grouped transactions, there are items to count or items with numeric values to some up, see ITEM1 and ITEM2/SUBITEM2.1.


<TRANSACTION-LIST>
  <TRANSACTION>
    <ITEM1> something to count </ITEM1>
    <ITEM2>
      <SUBITEM2.1> something to sum up</SUBITEM2.1>
      <SUBITEM2.2> ...
        <GROUPING-KEY>some-key</GROUPING-KEY>
      </SUBITEM2.2>
    </ITEM2>
  </TRANSACTION> ...
</TRANSACTION-LIST>

  The output should be a list as follows:
- Transaction following grouping key value 1:
    Numbers of ITEM1
    Sum of ITEM 2
- Transactions following grouping key value 2, 3, ...n: the same list with other values.

I am wondering if this is possible with XSLT 3.0 streaming, since then the XSLT processor "sees" the TRANSACTION element, it does not yet see the nested grouping key.

As the grouping key is in a descendant element, you would need to use copy-of first e.g.
  <xsl:template match="TRANSACTION-LIST">
     <xsl:copy>
<xsl:for-each-group select="copy-of(TRANSACTION)" group-by="ITEM2/SUBITEM2/GROUPING-KEY">
           <xsl:copy>
<item1-count><xsl:value-of select="count(current-group()/ITEM1)"/></item1-count>

Basically with copy-of the nodes are pulled into memory and you depend on the pipelining explained in https://www.w3.org/TR/xslt-30/#grounded-consuming-constructs.
--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--
<Prev in Thread] Current Thread [Next in Thread>