J'essaye de faire la somme du champ qty de mon xml en utilisant xslt 2.0 et de sortir la quantité d'un de mes équipements avec plusieurs entrées sans sommation par le groupe d'équipement. Des idées sur la façon dont cela peut être réparé?Addition d'une quantité en utilisant XSLT 2.0 avec le regroupement
C'est le XSLT J'utilise:
<xsl:for-each-group select="//node()" group-by="*[local-name()='lin_id']/text()">
<Results>
<xsl:element name="LIN_ID"><xsl:value-of select="*[local-name()='lin_id']"/></xsl:element>
<xsl:element name="Count"><xsl:value-of select="sum(current-group()/*[local-name()='qty'])"/></xsl:element>
</Results>
</xsl:for-each-group>
Voici le fichier XML source:
<Equipment>
<lin_id>C18312</lin_id>
<qty>5</qty>
</Equipment>
<Equipment>
<lin_id>C18345</lin_id>
<qty>22</qty>
</Equipment>
<Equipment>
<lin_id>C18378</lin_id>
<qty>43</qty>
</Equipment>
<Equipment>
<lin_id>C18378</lin_id>
<qty>208</qty>
</Equipment>
Et voici ce que la sortie est actuellement:
<Results>
<LIN_ID>C18312</LIN_Name>
<Count>5</Count>
</Results>
<Results>
<LIN_ID>C18345</LIN_Name>
<Count>22</Count>
</Results>
<Results>
<LIN_ID>C18378</LIN_Name>
<Count>43</Count>
</Results>
Vous peut voir qu'il fait le regroupement, mais pour LIN_ID C18378, il devrait être la somme des deux entrées et la sortie d'un compte de 251 mais au lieu de cela, il affiche simplement l'une des valeurs.
Je suppose que // node() get est le nœud actuel? Je n'ai aucune idée. J'ai hérité de ce fichier xslt et j'apprends juste pour ne pas être offensé par l'horrible déclaration de Bordeline. Je devrais aggree et certains des autres fichiers xslt ont un mélange de déclarations d'espaces de noms et je ne sais quoi d'autre. Ce que tu m'as donné a bien marché. Merci! – John81
Non, // node() sélectionne * chaque noeud * dans le document entier. *Tout*. Vous devriez lire sur XPath. ;-) En outre, le "borderline horrible" a aussi smiley. Si ma réponse a fonctionné, vous pouvez la marquer comme acceptée. –
Tomalak
Gotcha. Je voudrais marquer comme une réponse, mais j'ai besoin d'une réputation de 15 et seulement 10. Je reviendrai et le faire quand j'ai quelques points de plus. – John81