J'ai xml et je veux sélectionner les mêmes nœuds qui apparaissent consécutivement. J'ai essayé ci-dessous code: p> Quand j'ai essayé le code ci-dessus, tous les Je veux sélectionner les deux derniers
3 Réponses :
Voici le XPATH pour obtenir le 2ème nœud avec le même nom consécutivement.
//ifs[following-sibling::*[1][self::ifs] or preceding-sibling::*[1][self::ifs]]
J'ai ajouté ma sortie attendue. Pouvez-vous éditer la réponse comme ma sortie. parce que quand j'utilise votre xpath, il ne fonctionne pas
Mise à jour de la réponse s'il vous plaît vérifier et laissez-moi savoir.
Je ne sais pas pourquoi la réponse a été évitée, lorsque l'OP a mis à jour la question après avoir posté la réponse. Maintenant, la réponse est mise à jour en fonction des dernières modifications de la question.
@Ezehanlakshmen Avez-vous été capable d'obtenir les nœuds en utilisant le xpath ci-dessus?
J'ai utilisé ifs [suivant-frère :: * [1] [Self :: ifs] ou précédent-frère :: * [1] [auto :: ifs]] code> comme xpath
OK, le XPath I fourni identifiera toutes les balises consécutives, ajouté également le XPath que vous avez également utilisé la réponse. Si vous avez envie que le problème soit résolu. Veuillez accepter la réponse en cliquant sur la coche ci-dessous sur le bouton de vote Down et vous sentez FREE pour voter.
Essayez ceci:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="xml" indent="yes" /> <xsl:strip-space elements="*" /> <xsl:template match="/"> <count_node> <xsl:apply-templates /> </count_node> </xsl:template> <xsl:template match="topic2/ifs[preceding-sibling::node()[1][self::ifs] or following-sibling::node()[1][self::ifs]]"> <xsl:copy-of select="."/> </xsl:template> <xsl:template match="text()" /> </xsl:stylesheet>
En supposant que vous puissiez utiliser XSLT 2 ou plus tard, vous pouvez écrire un modèle pour topic2 code> éléments qui recherchent et enveloppent des groupes d'au moins deux
ifs code> éléments enfants avec
S'il vous plaît fournir ce que vous avez essayé en premier. Les gens apprécieront que plus.
@Kainix j'ai ajouté le code éprouvé
Bienvenue à cela. Toute chance avec
// * [frère précédent :: * [nom local () = nom local (actuel ())] code> (non testé)
@suppututui je pense que cela ne fonctionne pas
Pouvez-vous montrer un exemple de votre production attendue?
@Vebbie j'ai ajouté ma sortie attendue
@Shahanlakshmen Vérifiez le XPath que j'ai fourni dans la réponse et laissez-moi savoir.
Est "consécutif" basé sur la position de la séquence enfant de
topic2 code>? Ou sur la base de la valeur (par exemple
4 code>,
5 code>)? Que se passerait-il avec un 1 ifs> 3 ifs> 4 ifs> 5 if s> < foo /> 6 ifs> 7 ifs> topic2> code>?
@Martinhonnen non basé sur la valeur. Je veux obtenir la sortie comme je l'ai mentionné dans mon problème
Élaborer vos cas de test, qui aide les gens à donner une réponse plus générique.
Est une condition consécutive ici? Ou voulez-vous juste copier les deux derniers?
Quelle version XSLT utilisez-vous ou pouvez-vous utiliser? Dans XSLT 2 et plus tard, cela semble être un travail pour
roupi-adjacent code>: XSL: pour chacun groupe> xsl: modèle> code>.
@ michael.hor257k ouais il y a une condition consécutive ici
@Martinhonnen J'utilise XSLT 2.
Il semble que vous souhaitiez regrouper des éléments adjacents par nom ... Utilisez La réponse de Martin Honnen Modification de la clé de regroupement sur
Nom () Code>