Bonjour,
J'ai une fonction qui prend en entrée une séquence et retourne une séquence. Il s'agit de détecter les balises "link", à la fois en largeur ET en profondeur (donc la fonction est récursive), et appeler une fonction qui traite cette balise spécifiquement.
Le problème se situe au niveau de l'appel récursif en profondeur. En effet, s'il s'agit de contenu, il n'y a pas besoin de descendre. Mais s'il s'agit d'un élément, il faut aller en profondeur.
Ma question simple est donc la suivante : comment savoir si le node courant est une balise ? Je n'ai pas trouvé dans les spécifications une fonction qui prend un node en entrée et renvoie un booléen qui me dit si le node est un element.
Merci d'avance de toute aide
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 declare function local:in-or-out-link($node as item()*) as item()* { if (empty($node)) then () else let $fc := $node[1] let $ns := fn:subsequence($node,2) return if (fn:name($fc) eq "link") then (traitement_sur_$fc,local:in-or-out-link($ns)) else if ($fc_est_un_element) (: ici le test pour savoir si $fc est un element :) then (element {fn:node-name($fc)} { local:in-or-out-link($fc/*) },local:in-or-out-link($ns)) else ($fc,local:in-or-out-link($ns)) };![]()
Partager