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] Débutant erreur sur déclaration template


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 42
    Par défaut [XSLT] Débutant erreur sur déclaration template
    Bonjour,

    Le code suivant m'affiche : XSLT Error: (essai.xsl, line 47, column 38.)
    La ligne 47 correspond à : <xsl:template name="affiche_donnees">

    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
     
    <body>
    <table width="100%" border="0">
      <tr>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
    	<td>&nbsp;</td>
      </tr>
      <tr>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
    	<td>&nbsp;</td>
      </tr>
     
     
    <xsl:variable name="ville">
    <xsl:value-of select="LEI/resultat/sit_liste/ADRPROD_LIBELLE_COMMUNE" />
    </xsl:variable>
     
    <xsl:if test="position()=1">
    	<xsl:call-template name="affiche_donnees">
    		<xsl:with-param name="val_ville" select="$ville">
    		</xsl:with-param>
    	</xsl:call-template>
    </xsl:if>
    <xsl:template name="affiche_donnees">
    	<xsl:param name="val_ville" />
    		<xsl:for-each "LEI/resultat/sit_liste/ADRPROD_LIBELLE_COMMUNE"="$val_ville">
    			<tr>
    				<td>LEI/Resultat/sit_liste/NOM</td>
    				<td>LEI/Resultat/sit_liste/ADRPROD_LIBELLE_COMMUNE</td>
    				<td>LEI/Resultat/sit_liste/ADRPROD_TEL</td>
    			</tr>
    		</xsl:for-each>
    </xsl:template>
     
    </table>
    </body>
    Je ne vois pas du tout !
    J'espère que la solution est aussi évidente que lors de mon dernier message. Merci.

  2. #2
    Membre émérite
    Inscrit en
    Octobre 2005
    Messages
    847
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 847
    Par défaut
    cette partie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <xsl:variable name="ville">
    <xsl:value-of select="LEI/resultat/sit_liste/ADRPROD_LIBELLE_COMMUNE" />
    </xsl:variable>
     
    <xsl:if test="position()=1">
    	<xsl:call-template name="affiche_donnees">
    		<xsl:with-param name="val_ville" select="$ville">
    		</xsl:with-param>
    	</xsl:call-template>
    </xsl:if>
    est elle dans un xsl:template?..si ce n'est pas le cas, essaye de la mettre dans un <xsl:template match="/"> par exemple.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 42
    Par défaut
    je mets le code complet, car tout est englobé dans un template oui :

    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
     
    <?xml version="1.0" encoding="iso-8859-15"?><!-- DWXMLSource="esh.xml" --><!DOCTYPE xsl:stylesheet  [
    	<!ENTITY nbsp   " ">
    	<!ENTITY copy   "©">
    	<!ENTITY reg    "®">
    	<!ENTITY trade  "™">
    	<!ENTITY mdash  "—">
    	<!ENTITY ldquo  "“">
    	<!ENTITY rdquo  "”"> 
    	<!ENTITY pound  "£">
    	<!ENTITY yen    "¥">
    	<!ENTITY euro   "€">
    ]>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" encoding="iso-8859-15" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
    <xsl:template match="/">
     
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15"/>
    <title>Untitled Document</title>
    </head>
     
    <body>
    <table width="100%" border="0">
      <tr>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
    	<td>&nbsp;</td>
      </tr>
      <tr>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
    	<td>&nbsp;</td>
      </tr>
     
     
    <xsl:variable name="ville">
    <xsl:value-of select="LEI/resultat/sit_liste/ADRPROD_LIBELLE_COMMUNE" />
    </xsl:variable>
     
    <xsl:if test="position()=1">
    	<xsl:call-template name="affiche_donnees">
    		<xsl:with-param name="val_ville" select="$ville">
    		</xsl:with-param>
    	</xsl:call-template>
    </xsl:if>
    <xsl:template name="affiche_donnees">
    	<xsl:param name="val_ville" />
    		<xsl:for-each "LEI/resultat/sit_liste/ADRPROD_LIBELLE_COMMUNE"=$val_ville>
    			<tr>
    				<td>LEI/Resultat/sit_liste/NOM</td>
    				<td>LEI/Resultat/sit_liste/ADRPROD_LIBELLE_COMMUNE</td>
    				<td>LEI/Resultat/sit_liste/ADRPROD_TEL</td>
    			</tr>
    		</xsl:for-each>
    </xsl:template>
     
    </table>
    </body>
    </html>
     
    </xsl:template>
    </xsl:stylesheet>

  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
    Bonjour,

    il est interdit d'imbriquer les templates. Tu vas devoir réorganiser ton code en conséquence.
    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 émérite
    Inscrit en
    Octobre 2005
    Messages
    847
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 847
    Par défaut
    comme dit GrandFather, tu ne peux pas imbriquer des templates. ce que tu peux déja faire ici c'est de fermer ton premier template juste avant <xsl:template name="affiche_donnees">

    et non juste aprés..

    ensuite je vois ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <td>LEI/Resultat/sit_liste/NOM</td>
    				<td>LEI/Resultat/sit_liste/ADRPROD_LIBELLE_COMMUNE</td>
    				<td>LEI/Resultat/sit_liste/ADRPROD_TEL</td>
    sache juste que ces chemin ne seront pas évalué et que qu'ils sont considerer comme toute autre string.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 42
    Par défaut
    Vu que je n'arrivais à rien, je suis passé par un code qui n'appelle pas de template et qui boucle uniquement sur 1 LEI/Resultat/sit_liste/ADRPROD_LIBELLE_COMMUN et qui fonctionne exactement comme je veux. Voici le code :

    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
     
    <?xml version="1.0" encoding="iso-8859-1"?><!-- DWXMLSource="esh.xml" --><!DOCTYPE xsl:stylesheet  [
    	<!ENTITY nbsp   " ">
    	<!ENTITY copy   "©">
    	<!ENTITY reg    "®">
    	<!ENTITY trade  "™">
    	<!ENTITY mdash  "—">
    	<!ENTITY ldquo  "“">
    	<!ENTITY rdquo  "”"> 
    	<!ENTITY pound  "£">
    	<!ENTITY yen    "¥">
    	<!ENTITY euro   "€">
    ]>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" encoding="iso-8859-1" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>
    <xsl:template match="/">
     
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
    <title>Untitled Document</title>
    </head>
     
    <body>
    <xsl:variable name="ville">
    	<xsl:value-of select="LEI/Resultat/sit_liste/ADRPROD_LIBELLE_COMMUNE" />
    </xsl:variable>
    <table width="100%" border="0">
      <tr>
        <td colspan="2"><xsl:value-of select="$ville" /></td>
        <td>&nbsp;</td>
      </tr>
     
    <xsl:for-each select="LEI/Resultat/sit_liste">
    	<xsl:variable name="maville">
    		<xsl:value-of select="ADRPROD_LIBELLE_COMMUNE" />
    	</xsl:variable>	
    	<xsl:if test="$ville=$maville">
    	<tr>
        <td><xsl:value-of select="NOM" disable-output-escaping="yes"/></td>
        <td><xsl:value-of select="ADRPROD_LIBELLE_COMMUNE" disable-output-escaping="yes"/></td>
        <td><xsl:value-of select="ADRPROD_TEL" disable-output-escaping="yes"/></td>
      </tr>	 
      	</xsl:if>
     
    </xsl:for-each>
    </table>
    </body>
    </html>
     
    </xsl:template>
    </xsl:stylesheet>
    Voici le code html résultant :

    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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
     
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html>
    <head>
    <META http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Untitled Document</title>
    </head>
    <body>
    <table width="100%" border="0">
    <tr>
    <td colspan="2">
     Bellac
     
      </td><td>&nbsp;</td>
    </tr>
    <tr>
    <td>
     Crêperie du Vincou
     
      </td><td>
     Bellac
     
      </td><td></td>
    </tr>
    <tr>
    <td>
     Le BLanzac
     
      </td><td>
     Bellac
     
      </td><td>
     05 55 60 24 53
     
      </td>
    </tr>
    <tr>
    <td>
     Chez Boulette
     
      </td><td>
     Bellac
     
      </td><td>
     05 55 68 83 82
     
      </td>
    </tr>
    <tr>
    <td>
     Cafétaria Lamartine
     
      </td><td>
     Bellac
     
      </td><td>
     05 55 68 48 37
     
      </td>
    </tr>
    <tr>
    <td>
     Le Palais
     
      </td><td>
     Bellac
     
      </td><td>
     05 55 68 06 24
     
      </td>
    </tr>
    <tr>
    <td>
     Café du Pont de la Pierre
     
      </td><td>
     Bellac
     
      </td><td>
     06 74 50 90 79
     
      </td>
    </tr>
    <tr>
    <td>
     Auberge des quatre saisons
     
      </td><td>
     Bellac
     
      </td><td>
     05 55 53 45 45
     
      </td>
    </tr>
    <tr>
    <td>
     Auberge du Vincou
     
      </td><td>
     Bellac
     
      </td><td>
     05 55 68 75 61
     
      </td>
    </tr>
    </table>
    </body>
    </html>

    Ensuite, j'ai essayé de le transformer avec des template afin que ça boucle justement sur les LEI/Resultat/sit_liste/ADRPROD_LIBELLE_COMMUNE

    voici le code :

    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
    66
    67
    68
    69
    70
    71
     
    <?xml version="1.0" encoding="iso-8859-1"?><!-- DWXMLSource="esh.xml" --><!DOCTYPE xsl:stylesheet  [
    	<!ENTITY nbsp   " ">
    	<!ENTITY copy   "©">
    	<!ENTITY reg    "®">
    	<!ENTITY trade  "™">
    	<!ENTITY mdash  "—">
    	<!ENTITY ldquo  "“">
    	<!ENTITY rdquo  "”"> 
    	<!ENTITY pound  "£">
    	<!ENTITY yen    "¥">
    	<!ENTITY euro   "€">
    ]>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" encoding="iso-8859-1" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>
    <xsl:template match="/">
     
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
    <title>Untitled Document</title>
    </head>
     
    <body>
     
     
    <table width="100%" border="0">
    <xsl:call-template name="aff_titre">
    	<xsl:with-param name="ville">
    		<xsl:value-of select="LEI/Resultat/sit_liste/ADRPROD_LIBELLE_COMMUNE" />
    	</xsl:with-param>
    </xsl:call-template>
     
    </table>
    </body>
    </html>
    </xsl:template>
     
    <xsl:template name="aff_titre" match="LEI/Resultat/sit_liste">
    	<xsl:param name="ville" />
    	<tr>
        <td colspan="2"><xsl:value-of select="$ville" /></td>
        <td>&nbsp;</td>
     	</tr>
    	<xsl:call-template name="aff_info">
    		<xsl:with-param name="maville">
    		<xsl:value-of select="$ville" />
    		</xsl:with-param>
    	</xsl:call-template>	
     
    </xsl:template>
     
    <xsl:template name="aff_info" match="/">
    	<xsl:param name="maville" />
    	<xsl:for-each select="LEI/Resultat/sit_liste">
    		<xsl:variable name="laville">
    			<xsl:value-of select="ADRPROD_LIBELLE_COMMUNE" />
    		</xsl:variable>	
    		<xsl:if test="$laville=$maville">
    			<tr>
        			<td><xsl:value-of select="NOM" disable-output-escaping="yes"/></td>
        			<td><xsl:value-of select="ADRPROD_LIBELLE_COMMUNE" disable-output-escaping="yes"/></td>
        			<td><xsl:value-of select="ADRPROD_TEL" disable-output-escaping="yes"/></td>
      			</tr>	 
      		</xsl:if>
     
    	</xsl:for-each>
    </xsl:template>
     
     
    </xsl:stylesheet>
    et là, oh merveille, il apparait une page blanche !
    J'avais pourtant l'impression d'avoir compris comment ça fonctionnait, mais il semble que non finalement !

Discussions similaires

  1. Erreur sur mes templates et urlconf
    Par makelou dans le forum Django
    Réponses: 2
    Dernier message: 29/04/2010, 15h01
  2. Erreur sur déclaration de liste
    Par La Truffe dans le forum C++
    Réponses: 4
    Dernier message: 19/02/2006, 19h38
  3. Réponses: 6
    Dernier message: 20/11/2005, 02h53
  4. Réponses: 16
    Dernier message: 19/11/2005, 16h47
  5. Réponses: 1
    Dernier message: 06/10/2005, 10h09

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