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 :

[ajax] Problème transformation XML/XSL


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    LoK
    LoK est déconnecté
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2006
    Messages : 52
    Points : 100
    Points
    100
    Par défaut [ajax] Problème transformation XML/XSL
    Bonjour à tous,

    J'ai un script Ajax qui récupère un fichier XML et un fichier XSL et les transforme en XHTML. Il fonctionne correctement mais j'ai des problèmes avec la transformation XML/XSL.

    Voici le code XML généré dynamiquement avec PHP :
    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
     
    <?php
    header("Content-type: text/xml");
    echo ("<?xml version='1.0' encoding=\"ISO-8859-1\" ?>\n");
     
    ?>
     
    <centre>
    	<bloc>
    		<titre>Titre 1</titre>
    		<contenu>Test</contenu>
    	</bloc>
     
    	<separation></separation>
     
    	<bloc_fin>
    		<titre>Titre 2</titre>
    		<contenu>Test</contenu>
    	</bloc_fin>
    </centre>
    Sur cette exemple, PHP n'est pas utile mais par la suite, je générerais du contenu grâce à des requetes SQL.



    Le code XSL associé :
    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
    37
    38
    39
    40
    41
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     
     
     
    <xsl:template match="centre"> 
    	<xsl:apply-templates select="bloc" />
    	<xsl:apply-templates select="bloc_fin" />	
    </xsl:template>
     
     
     
    <xsl:template match="bloc"> 
    	<div class="bloc">
    		<p class="h2"><xsl:value-of select="titre" /></p><br/>
    		<xsl:apply-templates select="contenu" />	
    	</div>
     
    	<img class="image" src="doc/img7.jpg" alt="" />
    </xsl:template>
     
     
     
    <xsl:template match="bloc_fin"> 
    	<div class="bloc">
    		<p class="h2"><xsl:value-of select="titre" /></p><br/>
    		<xsl:apply-templates select="contenu" />	
    	</div>
    </xsl:template>
     
     
     
    <xsl:template match="contenu"> 
    	<p><xsl:value-of select="contenu" /></p>
    </xsl:template>
     
     
     
     
    </xsl:stylesheet>

    Une partie du code fonctionne bien puisque mes bloc sont disposés comme je le souhaite, les valeurs des titres apparaissent mais pas celles des "contenu".

    Je n'arrive pas à savoir pourquoi, je suppose que cela est liée à une mauvaise déclaration quelque part mais je en trouve pas mon erreur.

    Merci de m'éclairer,
    LoK.

  2. #2
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 18
    Points : 12
    Points
    12
    Par défaut
    Je tente, mais je ne garantis pas la réponse étant complètement débutant en xsl...

    A mon avis ce qui ne vas pas c'est que tu fais un apply-templates sur "contenu" et après tu utilise un value-of sur "contenu". XSL va appliquer ton template quand il va rencontrer <contenu> puis il va faire un value-of sur un éventuel élément fils qui s'appelle "contenu". Sauf qu'il n'y a pas de balise <contenu> fille dans ta balise <contenu>. Du coup il ne trouve pas l'élément que tu lui donnes.

    Plus clairement, l'erreur vient sûrement du fait que ton processeur cherche un fils de contenu qui s'appelle aussi contenu... et qui n'existe pas! Mais je peux me tromper hein

  3. #3
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    Le problème vient de là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:template match="contenu"> 
    	<p><xsl:value-of select="contenu" /></p>
    </xsl:template>
    Pour sélectionner ce qu'il y a dans les balises en cours, il faut faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:value-of select="." />

  4. #4
    LoK
    LoK est déconnecté
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2006
    Messages : 52
    Points : 100
    Points
    100
    Par défaut
    Le problème venait bien de ca. Vous m'avez permit d'avancer mais me voila de nouveau confronté à une erreur.

    J'ai crée le fichier XMl suivant où les balises inbriquées dans "contenu" sont affichés un ordre définit par pos="X".

    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
     
    [...]
     
     
    <centre>
    	<bloc>
    		<titre>Titre</titre>
    		<contenu>
    			<paragraphe pos="1">
    				<texte>Texte</texte>
    			</paragraphe>
     
    			<r_ligne pos="2"></r_ligne>
     
    			<paragraphe pos="3">
    				<texte>Texte</texte>
    			</paragraphe>
    		</contenu>
    	</bloc>
    </centre>
    Le fichier XSL associé :
    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
    37
    38
    39
     
    [...]
     
    <xsl:template match="centre"> 
    	<xsl:apply-templates select="bloc" />
    </xsl:template>
     
     
     
    <xsl:template match="bloc"> 
    	<div class="bloc">
    		<p class="h2"><xsl:value-of select="titre" /></p><br/>
    		<xsl:apply-templates select="contenu" />
    	</div>
    </xsl:template>
     
     
     
    <xsl:for-each match="contenu">
    <xsl:sort select="@pos" data-type="number" /> 	
    	<xsl:apply-templates select="paragraphe" />	
    	<xsl:apply-templates select="r_ligne" />		
    </xsl:for-each>
     
     
     
    <xsl:template match="paragraphe">
    	<p><xsl:value-of select="texte" /></p>	
    </xsl:template>
     
     
     
    <xsl:template match="r_ligne"> 
    	<br />
    </xsl:template>
     
     
     
    </xsl:stylesheet>
    Dans ce code, tout fonctionne parfaitement. Cependant, ma mise en page est plus complexe, j'ai donc rajouté d'autres éléments dans "paragraphe".


    Le XML est donc devenu le suivant (changement dans le premier paragraphe) :

    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
     
    [...]
     
    <centre>
    	<bloc>
    		<titre>Titre</titre>
    		<contenu>
    			<paragraphe pos="1">
    				<texte ord="1">Début Texte </texte>
    				<rs_mf ord="2">Texte mis en forme</rs_mf>
    				<texte ord="3">	Fin Texte</texte>
    			</paragraphe>
     
    			<r_ligne pos="2"></r_ligne>
     
    			<paragraphe pos="3">
    				<texte ord="1">Cliquez sur vous inscrire pour participer au jeu. Un accès régulier à Internet est nécessaire pour pouvoir jouer dans de bonnes conditions.</texte>
    			</paragraphe>
    		</contenu>
    	</bloc>
    </centre>
    J'ai également modifié le XSL en respectant la même logique que lorsque cela fonctionnait :

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    <xsl:template match="centre"> 
    	<xsl:apply-templates select="bloc" />
    	<xsl:apply-templates select="bloc_fin" />	
    </xsl:template>
     
     
     
    <xsl:template match="bloc"> 
    	<div class="bloc">
    		<p class="h2"><xsl:value-of select="titre" /></p><br/>
    		<xsl:apply-templates select="contenu" />
    	</div>
     
    	<img class="image" src="doc/img7.jpg" alt="" />
    </xsl:template>
     
     
     
    <xsl:template match="bloc_fin"> 
    	<div class="bloc">
    		<p class="h2"><xsl:value-of select="titre" /></p><br/>
    		<xsl:apply-templates select="contenu" />
    	</div>
    </xsl:template>
     
     
     
    <xsl:for-each match="contenu">
    <xsl:sort select="@pos" data-type="number" /> 	
    	<xsl:apply-templates select="paragraphe" />	
    	<xsl:apply-templates select="r_ligne" />		
    </xsl:for-each>
     
     
     
    <xsl:template match="paragraphe">
    <xsl:sort select="@ord" data-type="number" /> 
    	<p>
    	<xsl:apply-templates select="texte" />
    	<xsl:apply-templates select="rs_mf" />
    	</p>	
    </xsl:template>
     
     
     
    <xsl:template match="r_ligne"> 
    	<br />
    </xsl:template>
     
     
     
    <xsl:template match="texte"> 
    	<xsl:value-of select="." />
    </xsl:template>
     
     
     
    <xsl:template match="rs_mf"> 
    	<span class="green"><strong><xsl:value-of select="." /></strong></span>
    </xsl:template>
     
     
     
    </xsl:stylesheet>
    Mais maintenant, le script ne fonctionne plus alors que j'ai suivit le même processus.

    Si vous pouvez à nouveau me faire bénéficier de votre expérience...

  5. #5
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    847
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 847
    Points : 841
    Points
    841
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    le script ne fonctionne plus
    que ce qui ne fonctionne pas par exemple?

  6. #6
    LoK
    LoK est déconnecté
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2006
    Messages : 52
    Points : 100
    Points
    100
    Par défaut
    Plus rien n'est affiché lors du click sur le lien qui active la fonction Ajax.

Discussions similaires

  1. Réponses: 1
    Dernier message: 28/06/2010, 17h34
  2. transformation xml --> xsl --> xml
    Par Invité dans le forum Eclipse PHP
    Réponses: 0
    Dernier message: 03/02/2009, 16h15
  3. transformation xml+xsl dans un string et non un fichier
    Par le_chomeur dans le forum ASP.NET
    Réponses: 1
    Dernier message: 28/02/2008, 15h14
  4. Transformation xml + xsl -> HTML via PHP
    Par petit-ourson dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 19/10/2003, 22h42
  5. Pd de transformation XML/XSL sur un windows 2000 server US
    Par Sylvain Leray dans le forum XMLRAD
    Réponses: 3
    Dernier message: 24/03/2003, 11h00

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