Désolé, je suis plutôt nouveau au traitement XML ... J'ai ce qui suit:
for all divisions for all subdivisions print divisionName, subdivisionName, sum(values)
4 Réponses :
Vous pouvez utiliser cette simple xquery. Les énoncés code> déclarations code> sont uniquement destinés à définir le mode de sortie droit.
D1 SD1 1 D1 SD2 3 D2 SD3 4
pense que je pensais que ceci (supprime également WhitSpace):
for $divisionName in distinct-values(//divisionName) for $subdivisionName in distinct-values(//subdivisionName) return concat($divisionName,$subdivisionName,sum(//division[divisionName = $divisionName]//subdivision[subdivisionName = $subdivisionName]//value),'
')
<xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <xsl:template match="divisions"> <xsl:for-each select="division"> <xsl:for-each select="subdivisions/subdivision"> <xsl:value-of select="ancestor::subdivisions/preceding-sibling::divisionName"/><xsl:text> </xsl:text> <xsl:value-of select="subdivisionName"/><xsl:text> </xsl:text> <xsl:value-of select="sum(values/value)"/> <xsl:text>
</xsl:text> </xsl:for-each> </xsl:for-each> </xsl:template> You may try in xslt
Il n'est pas clair si vous devez regrouper (car il y a dupliquer https://xquereryfiddle.liberty-development.net/bfukv8j p> Si vous devez regrouper, alors XQuery en tant que clause code> par exemple p > https: //xqueryfiddle.liberty-développement. NET / BFUKV8J / 2 P> Tant pour la performance, vous devrez peut-être vérifier auprès du processeur XQuery de votre choix, dans une base de données XQuery, elle dépend de toute façon sur l'organisation et les index de la base de données que je pense. < / p> XSLT 3 a le traitement en continu, mais lorsque vos éléments ont des touches de regroupement des éléments enfants, vous devez copier des éléments: p> division code> éléments et / ou dupliquer
Subdivision code> éléments à l'intérieur d'un
division code>) , si vous n'avez pas de duplicates, vous pouvez utiliser (xquery 3.1)