La portée des variables dans XSLT
Je rencontre un problème à essayer de comprendre var portée sur xslt. Ce que je veux réellement faire de l'ignorer "trip" tags qui ont un répétée de tourcode'.
XML exemple:
<trip>
<tourcode>X1</tourcode>
<result>Budapest</result>
</trip>
<trip>
<tourcode>X1</tourcode>
<result>Budapest</result>
</trip>
<trip>
<tourcode>X1</tourcode>
<result>Budapest</result>
</trip>
<trip>
<tourcode>Y1</tourcode>
<result>london</result>
</trip>
<trip>
<tourcode>Y1</tourcode>
<result>london</result>
</trip>
<trip>
<tourcode>Z1</tourcode>
<result>Rome</result>
</trip>
Processeur XSLT:
<xsl:for-each select="trip">
<xsl:if test="not(tourcode = $temp)">
<xsl:variable name="temp" select="tour"/>
//Do Something (Print result!)
</xsl:if>
</xsl:for-each>
De Sortie Souhaité:
Budapest, londres, Rome
Titre de la question aurait été .. quelque chose comme, "Suppression de nœuds dupliqués à partir de xml à l'aide de XSLT"
OriginalL'auteur Mazzi | 2010-02-05
Vous devez vous connecter pour publier un commentaire.
Ce que vous êtes après est groupement sortie par le nom de la ville. Il ya deux façons de le faire en XSLT.
L'un d'eux est: est-ce
Et l'autre est appelée Muenchian regroupement et @Rubens Farias viens de poster une réponse qui montre comment le faire.
Il n'? Il n'avait pas quand je l'ai testé avec votre échantillon. Si vous affichez le code XML et XSL-vous travailler avec je suis sûr que je peux point de ce qui est mal.
Le xsl et xml sont peu encombrants, j'ai essayé de simplifier autant que possible. Je ne sais pas si stackoverflow a envoyer un message fonctionnalités?! Donc, je peux vous l'envoyer directement.
J'ai uploadé une nouvelle version de votre XSLT tinypaste.com/f3a23. N'hésitez pas à demander de suivi des questions et d'avoir du plaisir à essayer de le comprendre. 🙂
Oh putain. J'ai fait une petite erreur dans le
<xsl:sort>
. L'expression de tri est incorrect, mais seulement par un petit peu. C'est assez évident, je vous fait confiance pour trouver très rapidement. 🙂OriginalL'auteur Tomalak
Vous ne peut pas des changements de variables dans XSLT.
Vous avez besoin d'y réfléchir plus que programmation fonctionnelle au lieu de la procédure, parce que XSLT est un langage fonctionnel. Pensez à la variable de portée dans quelque chose comme ce pseudo-code:
Qu'attendez-vous la sortie? Il devrait être
10 5
, pas10 10
, parce que letemp
l'intérieur de la fonctionother
n'est pas la même variable quetemp
en dehors de cette fonction.C'est la même chose en XSLT. Variables, une fois créée, ne peut pas être redéfini parce qu'ils sont en écriture une fois, lisez-le nombre de variables de conception.
Si vous voulez faire de la valeur d'une variable définie de façon conditionnelle, vous devez définir la variable conditionnellement, comme ceci:
La variable n'est définie que dans un seul endroit, mais sa valeur est conditionnelle. Maintenant que
temp
's valeur est définie, elle ne peut pas être redéfini plus tard. En programmation fonctionnelle, les variables sont plus comme des paramètres en lecture seule en qui ils peuvent être définis, mais ne peut pas être modifié ultérieurement. Vous devez comprendre ceci correctement afin d'utiliser des variables dans tout langage de programmation fonctionnel.Écrivez toujours question vers ce que vous voulez faire (input->sortie désirée), jamais vers comment vous pensez que vous pouvez le faire. Dans ce cas: Vous ne souhaitez pas modifier les valeurs d'une variable, vous voulez produire une liste de valeurs uniques de l'entrée.
+1, vraiment grande réponse, @Welbog
Quelqu'un devrait changer la question, si cette réponse s'inscrit à nouveau. C'est beaucoup mieux que la question. Les Questions sont surfait de toute façon...
Désolé les gars pour changer la question. Maintenant j'ai ma réponse que voulez-vous me changer la question?
OriginalL'auteur Welbog
Essayez ceci:
OriginalL'auteur Rubens Farias