XPath : sélectionner tous les suivants frères et sœurs jusqu'à ce qu'un autre frère
Voici un extrait de mon xml :
<node/>
<node/>
<node id="1">content</node>
<node/>
<node/>
<node/>
<node id="2">content</node>
<node/>
<node/>
Je me suis placé dans le node[@id='1']
. J'ai besoin d'un Xpath pour correspondre à tous les <node/>
éléments jusqu'à la prochaine pas de nœud vide (ici node[@id='2']
).
Edit:
le @id attributs sont seulement d'expliquer mon problème le plus clairement, mais ne sont pas dans mon XML d'origine. J'ai besoin d'une solution qui n'utilise pas le @attributs id.
Je ne pas voulez faire correspondre le vide frères et sœurs après node[@id='2']
, donc je ne peux pas utiliser un naïf following-sibling::node[text()='']
.
Comment puis-je y parvenir ?
- Cela pourrait être d'utiliser: http://stackoverflow.com/questions/2063619/how-to-reformat-xml-with-group-adjacent-xslt
- Voir aussi: stackoverflow.com/questions/2165566/...
Vous devez vous connecter pour publier un commentaire.
Vous pourrait faire de cette façon:
où
'1'
est l'id du noeud courant (générer l'expression dynamiquement).L'expression dit:
Si vous êtes dans XSLT vous pouvez sélectionner les options suivantes-frère de l'axe, car vous pouvez utiliser le
current()
fonction:ou plus simple (et plus efficace) avec une clé:
Plus simple que l'on a accepté la réponse:
node
élémentsnode
avecid="2"
quelque part après eux.Indiqué dans l'action avec un son plus clair, le document de test (et juridique
id
valeurs):following
axe ici? Qui peut donner des faux positifs plus loin sur la route, si le document est plus grand (en plus de la suite de l'axe étant plus lent que n'importe quel autre de l'axe).XPath 2.0 a les opérateurs<< " et ">> " où
node1 << node2
est vrai si node1 précède node2 dans l'ordre du document.En se basant sur qu'avec XPath 2.0 dans une feuille de style XSLT 2.0, dans lequel le noeud est le noeud[@id = '1'] vous pouvez utiliser
Que la current() la fonction de XSLT, donc c'est pourquoi j'ai dit "avec XPath 2.0 dans une feuille de style XSLT 2.0". La syntaxe ci-dessus est de la pure XPath, dans une feuille de style XSLT, vous devrez échapper à la "<< "" <<".