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

XML/XSL et SOAP Discussion :

Ordre de parcours de l'arbre...


Sujet :

XML/XSL et SOAP

  1. #1
    Membre expérimenté

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    520
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 520
    Points : 1 446
    Points
    1 446
    Par défaut Ordre de parcours de l'arbre...
    Le processeur XSL est en train de matcher un noeud dans mon document, mais au moment de transformer un de ces noeud, j'ai besoin de récupérer une valeur plus haut dans mon document. J'ai fais quelques essais mais apparemment je ne peux pas sortir de l'espace du noeud courant...à part en utilisant Ancestor. C'est le seul moyen ?

    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
    20
    21
    22
    exemple :
     
    <Security>
      <Users>
        <User>
          <ID>39</ID>
          <Name>Sylvain</Name>
        </User>
        ...
      </Users>
    </Security>
    ...
    <LignesdeTableau>
      <Ligne>
         ...champs...
        <ID>39</ID>
      </Ligne>
      <Ligne>
         ...champs...
        <ID>40</ID>
      </Ligne>
    </LignesdeTableau>
    Disons que au niveau du process XSL nous sommes dans un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <xsl:template match="Ligne">
      <tr>
        <td>
          <xsl:value-of select="CHAMPx"></xsl:value-of>
        <td>
        <td>
          <xsl:value-of select="ancestor::node()/Users/User[ID=39]/Name">
          </xsl:value-of>
        <td>
      </tr>
    </xsl:template>
    Autre chose, dans "ancestor::node()/Users/User[ID=39]", au lieu du nombre 39 en dur je souhaite mettre la valeur de l'élément <ID> en cours du match de la "Ligne" (l'équivalent de Value of Select /ID).

    Vive les vacances 8)

    Sylvain
    .NET / ASP.NET MVC / Delphi / XMLRAD / XSL / Technos Web

    Mon Blog : http://blog.developpez.com/index.php?blog=89
    Mes Articles : http://sjames.developpez.com/
    Rubrique XMLRAD: http://xmlrad.developpez.com

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    520
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 520
    Points : 1 446
    Points
    1 446
    Par défaut
    Je me réponds...après une petite journée sympa je me suis bien marré.

    Donc ma solution du message initial était :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl&#58;value-of select="ancestor&#58;&#58;node&#40;&#41;/Users/User&#91;ID=39&#93;/Name">
    Déjà pour trouver le ID du noeud courant, il fallait utiliser la fonction Node(), ça donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:value-of select="ancestor::node()/Users/User[ID=current()/ID]/Name">
    Ca permet de récupérer le nom d'un noeud Users/User/Name dont le ID est égal au ID courant (dans la branche LignesdeTableau).

    Deuxième chose, l'emploi de Ancestor va obliger le processeur XSL à parcourir l'arborescence pour chaque noeud cherché afin de reconstituer le lien sur ID. A mon avis, au niveau perf, c'est pas le plus efficace.
    Il est donc à tenter de créer un index <xsl:key ... />, la recherche sera beaucoup plus rapide (selon le bouquin que j'ai lu).

    Sylvain
    .NET / ASP.NET MVC / Delphi / XMLRAD / XSL / Technos Web

    Mon Blog : http://blog.developpez.com/index.php?blog=89
    Mes Articles : http://sjames.developpez.com/
    Rubrique XMLRAD: http://xmlrad.developpez.com

  3. #3
    RDM
    RDM est déconnecté
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 424
    Points : 2 927
    Points
    2 927
    Par défaut
    en XPAth tu peux utiliser les ../.. poure remonter d'autant de niveaux que tu veux ou bien re partir depuis la racine en absolu:
    /doucment/security/users/user
    RDM
    Tout Est Relatif
    Rubrique XMLRAD: http://xmlrad.developpez.com
    FAQ XMLRAD: http://xmlrad.developpez.com/faq/

  4. #4
    Membre du Club
    Inscrit en
    Novembre 2002
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Novembre 2002
    Messages : 35
    Points : 44
    Points
    44
    Par défaut
    Bonjour,

    Ce que dis RDM est vrai le prb ce que c assez consomateur ...

    J'essayerai de stocker dans un variable le noeud en question et de faire des appel via ce noeud ca iras un peu plus vite mais pas recommender non plus si c pour des pages web en direct =)
    La simplicité est la sophistication suprême.

Discussions similaires

  1. [DOM] Parcours d'un arbre
    Par dbeland dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 28/11/2006, 23h03
  2. Pb parcour d'un arbre.
    Par ptipoutche dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 08/11/2006, 18h15
  3. Réponses: 4
    Dernier message: 19/02/2006, 19h43
  4. [debutant] parcours en profondeur arbre n-aire
    Par tx dans le forum Langage
    Réponses: 1
    Dernier message: 15/02/2006, 04h56
  5. parcours d'un arbre en sql
    Par dor_boucle dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/02/2006, 12h10

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