Nœud actuel vs nœud de contexte dans XSLT / XPath?

Dans XSLT, quelle est la différence entre le “nœud actuel” et le “nœud de contexte”? Vous pouvez trouver les deux termes utilisés ici: http://www.w3.org/TR/xslt .

Quand utiliseriez-vous l’un ou l’autre? Comment vous référez-vous à chacun?

Le nœud actuel est celui sur lequel le modèle fonctionne actuellement. Normalement, il s’agit également du nœud de contexte, mais le nœud de contexte a une signification particulière dans une expression XPath nestede (la partie entre crochets). Là, il fait référence à n’importe quel nœud actuellement testé pour une correspondance. Par conséquent, le nœud de contexte change dans l’expression XPath, mais pas le nœud actuel.

Le nœud de contexte peut être abrégé par un point ( . ) Ou parfois complètement omis. C’est probablement un peu déroutant, car en dehors d’une expression nestede, un point signifie le nœud actuel. (Dans ce cas, le nœud actuel se trouve être le nœud de contexte, on pourrait donc dire que c’est le nœud actuel seulement à proximité, et il est plus correctement appelé le nœud contextuel. Mais même la spécification l’appelle le nœud actuel.)

Étant donné qu’un point vous donne le nœud de contexte, dans une expression XPath nestede, l’utilisateur doit pouvoir se référer au nœud actuel, celui en cours de traitement par le modèle actuel. Vous pouvez le faire via la fonction current() .

Distinguer ces deux éléments est utile dans certains cas. Par exemple, supposons que vous ayez du XML comme ceci:

   foo bar   baz aak   eep blech  Batteries not included. Some assembly required.  

Supposons maintenant que vous souhaitiez le convertir en LaTeX comme ceci:

 foo\footnote{Batteries not included.} bar baz aak\footnote{Some assembly required.} eep blech\footnotemark[2] 

L’astuce est de savoir si une note de bas de page a déjà été utilisée ou non. Si c’est la première fois que vous rencontrez la note de bas de page, vous voulez écrire une commande \footnote ; sinon vous voulez écrire une commande \footnotemark . Vous pouvez utiliser le code XSL comme ceci:

  \footnote{...} \footnotemark[...]  

Nous comparons ici l’atsortingbut fn context-node (des résultats du preceding::* node-set) à l’atsortingbut fn actuel. (Vous n’avez pas vraiment à dire ./@fn ; vous pouvez simplement dire @fn .)

En bref, le nœud de contexte vous laisse dans le prédicat XPath; le nœud actuel atteint en dehors du prédicat, puis revient au nœud en cours de traitement par le modèle en cours.

Nœud de contexte

Le nœud de contexte fait partie du contexte d’évaluation XPath et varie avec chaque étape :

 step1 / step2 / step3 / ... 

où chaque step est

 axis::node-test[predicate] 
  • Chaque étape est évaluée par rapport aux noeuds de contexte définis par les étapes précédentes .
  • Chaque étape sélectionne ensuite les nœuds qui deviennent le nœud de contexte pour les étapes suivantes .
  • Lors de l’évaluation du predicate , le nœud de contexte est le nœud le long de l’ axis qui a réussi le node-test .
  • Le nœud de contexte est accessible en tant que . .

Noeud actuel

Le nœud actuel () fait partie du modèle de traitement XSLT : 1

  • Le nœud actuel est le nœud dans le document XML source le mieux adapté à un modèle XSLT.
  • Le nœud actuel devient le nœud de contexte de départ pour chaque expression XPath du modèle correspondant.
  • Le noeud actuel est accessible en tant que current() dans les prédicats XPath.

1 Bien que peu important pour comprendre la différence fondamentale entre le nœud contextuel et le nœud actuel, notez que dans XSLT 2.0, la description du contexte d’évaluation a été modifiée. Les concepts de noeud courant et de liste de noeuds actuels ont été remplacés par les concepts XPath d’ élément de contexte , de position de contexte et de taille de contexte.