IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XQUERY/SGBD XML Discussion :

[XQuery] Tester si un node est un élément


Sujet :

XQUERY/SGBD XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2005
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 32
    Par défaut [XQuery] Tester si un node est un élément
    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.

    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))
    };
    Merci d'avance de toute aide

  2. #2
    Membre averti
    Inscrit en
    Avril 2005
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 32
    Par défaut
    Pas d'idée ?


  3. #3
    Membre averti
    Inscrit en
    Avril 2005
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 32
    Par défaut
    Bonjour

    Finalement, j'ai trouvé la réponse en consultant les "use cases" XQuery sur le site du W3C. Il faut utiliser la directive "instance of" : http://www.w3.org/TR/xquery/#id-instance-of

    Consultez par exemple cette requête : http://www.w3.org/TR/xquery-use-case...ueries-results

    En ce qui concerne mon code, cela donne donc :

    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 instance of element(*)) (: ici le test pour savoir si $fc est un element (n'importe lequel) :)
              then
              (element {fn:node-name($fc)} { local:in-or-out-link($fc/node()) },local:in-or-out-link($ns))
            else
              ($fc,local:in-or-out-link($ns))
    };
    Voilà, j'espère que ça servira à d'autres...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Tester si un style est appliqué sur un élément
    Par Kagami dans le forum jQuery
    Réponses: 8
    Dernier message: 25/06/2015, 14h17
  2. Tester si le node selectionné est un node fils
    Par sihammaster dans le forum VB.NET
    Réponses: 0
    Dernier message: 06/05/2010, 11h44
  3. [XSL] Tester si la valeur est un entier dans un xml
    Par MrMaze dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 23/07/2003, 04h35
  4. Tester si un champ est NULL
    Par titititi007 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 19/06/2003, 10h17
  5. tester si une date est valide
    Par Andry dans le forum Langage
    Réponses: 5
    Dernier message: 17/09/2002, 11h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo