Je veux trier les nœuds en fonction des attributs. Dites qu'il y a trois attributs A, B et C dans l'élément E1. Je sais qu'un sous-groupe de nœuds a la même valeur d'attribut A et B. Comment puis-je obtenir ce sous-groupe récupérer le nœud qui a la valeur maximale de C? La partie délicate ici est que je ne sais pas quelle est la valeur de A. Je sais juste que ce sous-groupe partage la même valeur de A. Tout comme un index à deux clés.Trier les nœuds en fonction de plusieurs attributs?
Je pense utiliser pour chaque sous-groupe pour chaque groupe.
exemple
<masterNodes>
<Node>
<Element1 A="123" B="LEFT" C="1">
<Element2>...</Element2>
</Node>
<Node>
<Element1 A="123" B="DOWN" C="5">
<Element2>...</Element2>
</Node>
<Node>
<Element1 A="abc" B="RIGHT" C="2">
<Element2>...</Element2>
</Node>
<Node>
<Element1 A="123" B="LEFT" C="3">
<Element2>...</Element2>
</Node>
<Node>
<Element1 A="4XX" B="LEFT" C="4">
<Element2>...</Element2>
</Node>
<Node>
<Element1 A="abc" B="RIGHT" C="1">
<Element2>...</Element2>
</Node>
<Node>
<Element1 A="4XX" B="LEFT" C="5">
<Element2>...</Element2>
</Node>
<Node>
<Element1 A="4XX" B="UP" C="0">
<Element2>...</Element2>
</Node>
</masterNodes>
Comment puis-je n'écrire la valeur maximale de C pour le noeud avec la même valeur de A et B?
Voici comment je structure mon code. Mais je ne le fais jamais fonctionner.
<xsl:for-each-group select="/Node/Element1" group-by="@A">
<xsl:for-each select=".[@B='LEFT']">
<xsl:sort select="@C" data-type="number" order="descending"/>
<xsl:if test="position()=1"><xsl:value-of select="@C"/></xsl:if>
</xsl:for-each><xsl:text>
</xsl:text>
<xsl:for-each select=".[@B='RIGHT']">
<xsl:sort select="@C" data-type="number" order="descending"/>
<xsl:if test="position()=1"><xsl:value-of select="@C"/></xsl:if>
</xsl:for-each><xsl:text>
</xsl:text>
<same for other direction>
</xsl:for-each-group>
Quelque chose ne va pas?
+1, mais je pense que l'OP veut 'concat de groupe = (@A, @B)" ' – Tomalak