Multiplier 2 nombres, et somme
Je vais avoir un moment difficile essayer de faire quelque chose qui semble comme il devrait être très facile à faire. En gros, je veux multiplier 2 nombres dans un nœud puis additionner le total de ces nombres pour tous les nœuds. Voici le code XSLT, j'ai essayé.
<xsl:value-of select="sum(Parts/Part/Quantity * Parts/Part/Rate)"/>
Ce code provoque une erreur qui dit que "l'Argument 1 de la fonction somme ne peut être converti en un ensemble de nœuds."
Quelqu'un a une idée de ce qui est mal ou comment je peux accomplir ce que je suis en train de faire?
Est-ce XSLT version 1 ou 2?
vous devez mentionner l'suffisamment de détails .. alors que les autres peuvent penser de vous aider .. XSLT version, processeur saxonne (ou someother) ou @Moins logiciel (Visual studio/ Altova XML Spy) doit être mentionné ..
vous devez mentionner l'suffisamment de détails .. alors que les autres peuvent penser de vous aider .. XSLT version, processeur saxonne (ou someother) ou @Moins logiciel (Visual studio/ Altova XML Spy) doit être mentionné ..
OriginalL'auteur | 2009-01-12
Vous devez vous connecter pour publier un commentaire.
Voici trois solutions possibles:
Solution1 XSLT2:
Lorsque cette transformation est appliquée sur le document XML suivant:
Le résultat voulu est produit:
4
La XSLT 2.0 solution utilise le fait que, dans XPath 2.0 il est admis que le droit à l'argument de la dernière opérateur "/" peut être une expression, ou, plus généralement une fonction. Cette expression de la fonction/est appliquée pour chacun des nœuds sélectionnés jusqu'à présent, agissant comme le nœud de contexte, et chaque fonction de l'application produit un résultat.
Solution2 XSLT 1.0:
Lorsqu'il est appliqué sur le dessus de document XML, le résultat correct est produit:
4
C'est typique de XSLT 1.0 solution récursive. Note de la façon dont le
sumProducts
modèle appelle récursivement, jusqu'à ce que l'ensemble de l'entrée de la liste, transmise dans le paramètre$pList
est traitée.Solution3 FXSL (XSLT 1.0):
Lorsque cette transformation est appliquée sur le document XML suivant:
Le résultat correct est produit:
7.5600000000000005
Dans le dernier cas, pour chaque
sale
nous de calculer le produit deprice
,quantity
et tous disponibles (nombre variable)discount
-s.FXSL est un pur XSLT mise en œuvre des fonctions supérieures. Dans cet exemple, la fonction d'ordre supérieur
f:map()
est utilisé pour mapper la fonctionf:product()
sur la liste des enfants de tous lessale
élément. Ensuite, les résultats sont additionnés pour produire le résultat final.+1 pour l'effort et les dépenses du temps .. 🙂
Merci pour votre appréciation! Si vous avez aimé ce que vous allez comme un grand nombre de choses sur mon blog: dnovatchev.spaces.live.com/Blog
OriginalL'auteur Dimitre Novatchev
Tous Dimitre les solutions de travail et il est vrai que vous n'avez pas besoin pour utiliser les fonctions d'extension, mais parfois, il rend la vie plus facile. Il n'est pas trop dangereux, surtout lorsque vous utilisez exslt extensions qui sont pris en charge à travers de multiples processeurs XSLT. Aussi, la raison pour laquelle vous obtenez les erreurs de séquence est probablement parce que vous êtes à l'aide d'une transformation XSLT 1 processeur.
Si vous souhaitez persister avec la solution choisie, vous aurez besoin d'utiliser Saxonne ou une autre processeur XSLT qui prend en charge XSLT 2.
Sinon, voici une méthode alternative de le faire dans XSLT 1. Cela fonctionne dans la plupart des processeurs XSLT et certains gens peut-être plus facile à analyser que la version récursive. Personnellement, je préfère une version récursive (Dimitre 3ème proposition), parce qu'il est plus portable.
OriginalL'auteur cddr