0
votes

Sélectionnez les mêmes nœuds qui existent consécutivement

J'ai xml et je veux sélectionner les mêmes nœuds qui apparaissent consécutivement. xxx

J'ai essayé ci-dessous code: xxx

Quand j'ai essayé le code ci-dessus, tous les Les balises sont Sélectionné.

Je veux sélectionner les deux derniers oms> à l'intérieur étiquette en utilisant xpath car ils sont consécutifs < p> sortie attendue: xxx


15 commentaires

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 ())] (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 ? Ou sur la base de la valeur (par exemple 4 , 5 )? Que se passerait-il avec un 1 3 4 5 < foo /> 6 7 ?


@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 : .


@ 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 ()


3 Réponses :


0
votes

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]]


6 commentaires

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]] 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.



0
votes

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>


0 commentaires

0
votes

En supposant que vous puissiez utiliser XSLT 2 ou plus tard, vous pouvez écrire un modèle pour topic2 éléments qui recherchent et enveloppent des groupes d'au moins deux ifs éléments enfants avec xxx

Exemple complet à https://xsltfiddle.liberty-development.net/jyryyif < / a>, utilise Saxon 9.8, de sorte que XSLT 3 mais ci-dessus utilise uniquement des fonctionnalités déjà disponibles dans XSLT 2.


0 commentaires