У меня есть следующий XML-файл (который я не контролирую):
<recordset>
<row>
<field name="orderid">1</field>
<field name="orderlineid">1</field>
<field name="quantity">2</field>
<field name="item">Thing 1</field>
</row>
<row>
<field name="orderid">2</field>
<field name="orderlineid">2</field>
<field name="quantity">1</field>
<field name="item">Thing 3</field>
</row>
<row>
<field name="orderid">2</field>
<field name="orderlineid">3</field>
<field name="quantity">1</field>
<field name="item">Thing 2</field>
</row>
<row>
<field name="orderid">3</field>
<field name="orderlineid">4</field>
<field name="quantity">3</field>
<field name="item">Other</field>
</row>
</recordset>
И я борюсь с XSLT
и for-each-group
, чтобы сгруппировать по идентификатору заказа и сгенерировать следующий XML:
Вот мое посещение на данный момент:
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="keyOrder" match="row" use="field/@name = 'COMMANDE'" />
<xsl:template match="resultset">
<commandes xmlns:od="http://www.w3.org/2001/XMLSchema-instance">
<xsl:apply-templates/>
</commandes>
</xsl:template>
<xsl:template match="row">
<orders>
<xsl:for-each-group select="./child::*" group-by="field/@name = 'orderid'">
<order>
<xsl:value-of select="field[@name = 'COMMANDE']"/>
</order>
</xsl:for-each-group>
</orders>
</xsl:template>
</xsl:stylesheet>
Как я могу: - Группировать по дочернему узлу - Подсчитать, сколько строк у меня вкаждая группа?