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] Comment tester si on a déjà recontré un noeud


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 46
    Par défaut [XSLT] Comment tester si on a déjà recontré un noeud
    Bonjour,

    j'ai un fichier xml de résultats de recherche. Il est de ce type
    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
    23
    24
     
    <?xml version='1.0' encoding="ISO-8859-1" ?>
    <TEST>
    <SERVICE num="1" name="ke">
     
    	<NBANS value="10" start="1" end="10"/>
            <R num="0">
             <TITLE>sdfdf</TITLE>
    	 <URL>www.google.fr</URL>
    	 <RESUME>blab bla bla</RESUME>
    	</R>
            <R num="1">
             <TITLE>sdfdf</TITLE>
    	 <URL>www.google.fr</URL>
    	 <RESUME>blab bla bla</RESUME>
    	</R>
    </SERVICE>
     
    <SERVICE>
         <HELLO>ssffsfhrhh
         </HELLO>
     
    </SERVICE>
    </TEST>
    voici mon xsl qui m'affiche le nombre de résultat puis la liste des résultats avec le titre , l'url et le résumé:
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    <xsl:template match="SERVICE">
     
      	<div>
     
        <xsl:apply-templates select="NBANS" />
        <br /><br />
     
            <xsl:apply-templates select="R" />
        </div>
    </xsl:template>
     
    <xsl:template match="NBANS">
        <div class="resultat">
        <xsl:text> Il y a </xsl:text>
        <xsl:value-of select="@value" />
        <xsl:text> résultat(s) correspondant(s) </xsl:text><br /><br />
        <xsl:text> Documents </xsl:text>
        <xsl:value-of select="@start" />
        <xsl:text> à </xsl:text>
        <xsl:value-of select="@end" />
        <xsl:text> sur </xsl:text>
        <xsl:value-of select="@end" />
        </div>
    </xsl:template>
     
    <xsl:template match="R">
        <div class="moteur_resultat">
        <a href="{URL}"><xsl:value-of select="@num +1" /><xsl:text disable-output-escaping="yes">&amp;nbsp;-&amp;nbsp;</xsl:text><xsl:value-of select="TITLE" /></a><br />
        <xsl:value-of select="RESUME" />
        <br /><br />
        </div>
        <br />
    </xsl:template>
     
    </xsl:stylesheet>
    Le probleme est que je voudrais afficher seulement le contenu du premier noeud service et ignoré le second qui ne contient rien d'intéressant car sinon j'ai une liste de résultat correcte et une seconde qui ne va pas a cause du second noeud service.
    Merci pour votre aide.

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

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par défaut
    Bonjour,

    quelque part dans ton code, il faut que tu remplaces :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:apply-templates select="SERVICE" />
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:apply-templates select="SERVICE[1]" />
    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

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 46
    Par défaut
    oui mais a aucun moment dans mon code je n'ai <xsl:apply-templates select="SERVICE" />


    je fais juste un <xsl:template match="SERVICE"> au début de mon code

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

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par défaut
    Tu n'as pas de template pour les noeuds <TEST>, et tu n'as ni balises <HTML> et <BODY> en sortie ?
    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 averti
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 46
    Par défaut
    En fait le code je fais une inclusion du code html de résultat dans une page php, donc je n'ai pas besoin des <html>, <body>.

    Pour ce qui est du fichier xsl, non je n'ai pas de template pour le noeud test et ca marche (je débute en xsl). D'ailleur si je rajoute une template pour test de cette maniere:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <xsl:template match="TEST">
     
      	<div>
     
        <xsl:apply-templates select="SERVICE" />
     
        </div>
    </xsl:template>
    et bien à l'affichage je n'ai rien.

    Je ne vois pas ou est le probleme, si tu as une idée?

    merci d'avance

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 46
    Par défaut
    en fait avec une template pour le noeud test tout fonctionne bien.

    merci.

    en fait avant j'avais fait une template pour le noeud racine "/"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:template match="/">
        <xsl:apply-templates select="SERVICE[1]" />
    </xsl:template>
    mais ca ne marchait, pourrais tu me dire pourquoi ?

  7. #7
    Membre émérite
    Inscrit en
    Octobre 2005
    Messages
    847
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 847
    Par défaut
    je pense que ça marchera mieux si tu met ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <xsl:template match="/">
        <xsl:apply-templates select="//SERVICE[1]" />
    </xsl:template>
    mais le mieux c de faire :

    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
     
    <xsl:template match="/">
        <xsl:apply-templates/>
    </xsl:template>
     
    <xsl:template match="Test">
        <xsl:apply-templates select="SERVICE[1]"/>
    </xsl:template>
     
    <xsl:template match="SERVICE">
        	<div>
     
        <xsl:apply-templates select="NBANS" />
        <br /><br />
     
            <xsl:apply-templates select="R" />
        </div>
    </xsl:template>

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 46
    Par défaut
    merci pour (vos)tes conseils

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

Discussions similaires

  1. [XSLT]Comment tester si NaN
    Par FlyByck dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 06/09/2006, 11h09
  2. Comment tester si fichier est ouvert ?
    Par fusef dans le forum Langage
    Réponses: 7
    Dernier message: 11/08/2004, 18h51
  3. Réponses: 10
    Dernier message: 06/07/2004, 02h44
  4. comment tester si une fonction fait bien son travail
    Par access dans le forum Requêtes
    Réponses: 1
    Dernier message: 24/11/2003, 15h46
  5. Réponses: 10
    Dernier message: 18/11/2003, 18h01

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