2 votes

Est-ce qu'il existe une fonction ou un opérateur XPATH pour comparer la profondeur des nœuds?

Exemple :

    élément 1

        élément 2
        élément 3

            élément 5 

    élément 6

Si l'élément li avec le texte item 5 est le nœud de contexte, l'expression following::* donnerait l'élément li avec le texte item 6. Y a-t-il un moyen intégré d'obtenir la différence de profondeur de ces nœuds ? c'est-à-dire si nous définissons la racine ul comme ayant une profondeur de 0, alors ses enfants (li élément 1, ul, li élément 6) auraient une profondeur de 1, et ainsi de suite. L'élément li élément 5 a une profondeur de 3.

L'axe ancestor pourrait être utilisé à partir des deux nœuds, mais je me demande s'il y a une autre façon. Une autre possibilité pourrait être de conserver des informations d'état lors de la traversée de l'arbre et si le parent avait des frères suivants ?

1voto

Martin Honnen Points 46896

La question est étiquetée comme XSLT 2 mais comme vous avez mentionné la traversée de l'arbre pour conserver des informations d'état, il pourrait être utile de mentionner un accumulateur XSLT 3, par exemple:

https://xsltfiddle.liberty-development.net/ei5R4uS

Je sais que vous avez défini la valeur pour l'élément racine comme étant 0, mais utiliser 0 pour le nœud racine / et ensuite +1 comme profondeur pour ses éléments enfants me semble plus raisonnable.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X