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

XSL/XSLT/XPATH XML Discussion :

[XSLT][XPath] trop de récursion


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre actif Avatar de ploxien
    Inscrit en
    Février 2006
    Messages
    467
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Février 2006
    Messages : 467
    Points : 221
    Points
    221
    Par défaut [XSLT][XPath] trop de récursion
    Hello,
    Je cherche à faire des templates qui ne s'appliquent qu'au niveau au dessous d'eux et pas en récursion...
    Si j'ai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <A>
      <B>
        <C/> <!--premier-->
      </B>
      <C/> <!--second-->
    </A>
    je voudrais pouvoir faire qq chose du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <xsl:template match="A">
      <xsl:apply-templates/>
      ...
    </...
    <xsl:template match="C"> (mais que le second C, pas celui qui est dans <B>.)
      ...
    Donc en fait, qu'il ne cherche pas en récursion... Et cela pas uniquement pour ce niveau, mais que ce soit générique, que le même template le fasse pour un niveau plus profond aussi...
    En espérant être assez clair , merci d'avance
    (\ _ /)
    (='.'=)
    (")-(")
    Deux règles du succès:
    1) Ne communiquez jamais à quelqu'un tout votre savoir...

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    mmm...

    disons que tu as plusieurs méthodes, en fonction de comment ta feuille de style doit fonctionner...

    En fait, soit tu empêche la transfo de l'élément C fils de B :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <xsl:template match="B">
      <xsl:apply-templates select="*[not(name()='C')]"/>
      ...
    </...
    ou bien tu peut mettre une condition sur la règle de "C" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <xsl:template match="C[count(ancestor::*)=1]">
      <-- règle pour les "C" ayant un 1 seul ancêtre -->
      ...
    </...
    ou bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <xsl:template match="C[parent::A]">
      <-- règle pour les "C" ayant un père "A" -->
      ...
    </...

    je me suis peut-etre craqué sur la syntaxe XPath mais certains me corrigeront avec joie

  3. #3
    Membre actif Avatar de ploxien
    Inscrit en
    Février 2006
    Messages
    467
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Février 2006
    Messages : 467
    Points : 221
    Points
    221
    Par défaut
    Je pense que la dernière solution va faire mon bonheur...
    Merci bien
    (\ _ /)
    (='.'=)
    (")-(")
    Deux règles du succès:
    1) Ne communiquez jamais à quelqu'un tout votre savoir...

  4. #4
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Citation Envoyé par djamonphil
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <xsl:template match="C[parent::A]">
      <-- règle pour les "C" ayant un père "A" -->
      ...
    </...
    Question concision et performances, il vaudrait mieux cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <xsl:template match="A/C">
      <-- règle pour les "C" ayant un père "A" -->
      ...
    </...
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    tiens tant qu'on y est...
    les 2 syntaxes suivantes, bien que synonymes, ne sont pas interprêtées de la même manière ??? ce dépend des processeurs je suppose, mais est-ce vrai que les perf peuvent s'en faire ressentir ?


  6. #6
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Citation Envoyé par djamonphil
    les 2 syntaxes suivantes, bien que synonymes, ne sont pas interprêtées de la même manière ???
    Je ne pense pas. Si je devais développer un processeur XSLT, je considérerais le "pattern matching" comme une l'évaluation d'une expression XPath inversée. Ainsi, "matcher" A/C pour un template revient en fait à évaluer self::C/parent::A avec chaque noeud de la liste courante de noeuds sélectionnés, tandis que C[parent::A] serait traduit en self::C[parent::A]. Encore que ça puisse changer d'une implémentation à l'autre, on peut considérer que l'évaluation d'un chemin prend moins de ressources que celle d'un prédicat, où le noeud contextuel doit être empilé/dépilé.

    En terme de facilité de lecture, par contre là y'a pas photo.
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

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

Discussions similaires

  1. [xslt] [xpath] reformater un document xml
    Par deague dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 08/02/2006, 20h36
  2. [XSLT][XPATH] Conseil
    Par totoen dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 15/12/2005, 13h56
  3. xslt+xpath
    Par yos dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 03/10/2005, 15h08
  4. [XSLT+XPath] Échapper les accolades XPath
    Par Floyd dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 30/09/2005, 23h04

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