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 :

erreur XPath


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2003
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2003
    Messages : 217
    Points : 242
    Points
    242
    Par défaut erreur XPath
    Je ne sais pas si c'est le bon endroit pour poster mes erreurs xml, mais je débute en XML/XSL/XSLT et j'ai une erreur "Erreur lors du chargement de la feuille de style : Échec de l'analyse XPath : test de Name ou de Nodetype attendu :" avec ce fichier la :

    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
    <?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="list">
    		<rangs>
    			<xsl:apply-templates select="rang" />
    		</rangs>
    	</xsl:template>
     
    	<xsl:template match="rang">
    		<rang>
    			<id value="{@rang_id}" />
    			<nom value="{@nom}" />
    			<users>
    				<xsl:call-template name="construc_user">
    					<xsl:with-param name="id" select="@rang_id" />
    				</xsl:call-template>
    			</users>
    		</rang>
    	</xsl:template>
     
    	<xsl:template match="user">
    		<user>
    			<id value="{@user_id}" />
    			<nom value="{@nom}" />
    		</user>
    	</xsl:template>
     
     
    	<xsl:template name="contruc_user">
    	<xsl:param name="id" select="0" />
     
    		<xsl:for-each select="user">
    			<xsl:if test="@rang == id">
    				<xsl:apply-templates select="." />
    			</xsl:if>
    		</xsl:for-each>
    	</xsl:template>
    </xsl:stylesheet>
    Je ne vois pas l'erreur, elle est très surement banale mais bon, ya un début à tout.

  2. #2
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2003
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2003
    Messages : 217
    Points : 242
    Points
    242
    Par défaut
    euh, j'ai réglé avec IE (pour une fois que FF est moins bien )

    Par contre la page est vierge (code XML : )

    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
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <?xml-stylesheet href="test1.xsl" type="text/xsl"?>
     
    <list>
    	<users>
    		<user user_id="1" nom="machin" rang="1" />
    		<user user_id="2" nom="truc" rang="2" />
    		<user user_id="3" nom="bidule" rang="1" />
    		<user user_id="4" nom="chose" rang="2" />
    		<user user_id="7" nom="machin encore un" rang="2" />
    	</users>
    	<rangs>
    		<rang rang_id="1" nom="admin" />
    		<rang rang_id="2" nom="membre" />
    		<rang rang_id="3" nom="invite" />
    		<rang rang_id="4" nom="null" />
    	</rangs>
    </list>
    Ai je fait une erreur quelque part ?

  3. #3
    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
    Bonjour,

    il y a plusieurs erreurs :

    • dans le template list, tu appelles le template pour les noeuds <rang> ; or, les noeuds <rang> ne sont pas fils de <list>, mais de <rangs>. Il faut corriger ton attribut select.
    • Même problème dans ta fonction "contruc_user", le for-each ne pourra jamais atteindre les noeuds <user>, il ne faut pas oublier que cette fonction s'exécute dans le contexte d'un noeud <rang>
    • Le test d'égalité se fait avec =, pas avec == (on n'est pas en Java )

    D'autre part, il n'est pas nécessaire d'utiliser une fonction pour faire la "jointure" entre les noeuds <rang> et les noeuds <user>, il suffit d'utiliser un prédicat. Par exemple :

    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
    <?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="list"> 
          <rangs> 
             <xsl:apply-templates select="rangs/rang" /> 
          </rangs> 
       </xsl:template> 
     
       <xsl:template match="rang"> 
          <rang> 
             <id value="{@rang_id}" /> 
             <nom value="{@nom}" /> 
             <users>
               <xsl:apply-templates select="/list/users/user[@rang = current()/@rang_id]"/> 
             </users> 
          </rang> 
       </xsl:template> 
     
       <xsl:template match="user"> 
          <user> 
             <id value="{@user_id}" /> 
             <nom value="{@nom}" /> 
          </user> 
       </xsl:template> 
     
    </xsl:stylesheet>
    La fonction XPath current() renvoie le noeud contextuel, c'est à dire le noeud sélectionné avant que l'expression XPath ne soit évaluée (en l'occurrence ici un <rang>)

    P.S. : merci d'éviter les grossièretés dans les exemples, ça ne fait pas très sérieux. La prochaine fois, j'éradique le post sans sommation.
    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

  4. #4
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2003
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2003
    Messages : 217
    Points : 242
    Points
    242
    Par défaut
    Citation Envoyé par GrandFather
    P.S. : merci d'éviter les grossièretés dans les exemples, ça ne fait pas très sérieux. La prochaine fois, j'éradique le post sans sommation.
    lol, dsl, je l'avais fait pour mes tests en local, j'ai oublié de modifier avant de poster (mon imagination était un peu bridé en fait ) et merci de ton aide et de pas avoir supprimé.

  5. #5
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2003
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2003
    Messages : 217
    Points : 242
    Points
    242
    Par défaut
    c'est vraiment bizarre, j'ai utilisé le xsl que tu m'as corrigé et pourtant, sur FF comme sur IE, la page est vierge !!!
    D'où peut venir le problème ? (j'ai IE 6.0 et FF 1.0 ).
    J'ai voulu tester avec un script php mais malheureusement l'extension xslt n'est pas installée.
    Merci de ton aide.

    [edit] Est ce que ca viendrait du fait que je n'ai pas fait de DTD ? [/edit]

  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
    Il n'est pas nécessaire d'avoir une DTD. Par contre, assure-toi que ta feuille de style soit dans le bon dossier et accessible
    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

  7. #7
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2003
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2003
    Messages : 217
    Points : 242
    Points
    242
    Par défaut
    logiquement oui puisque si j'altère la syntaxe de la feuille de style, le navigateur me le fait remarquer quand j'ouvre le fichier test1.xml

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/03/2008, 14h12
  2. erreur PLS-00382 xpath.valueof
    Par sol-elodie dans le forum SQL
    Réponses: 4
    Dernier message: 12/11/2007, 22h05
  3. [XPATH] compare(): message d erreur incomprehensible
    Par cdubet dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 15/10/2007, 08h54
  4. [C# Asp.net] Erreur XPath Classe
    Par jfdeterme dans le forum ASP.NET
    Réponses: 1
    Dernier message: 05/04/2007, 11h05
  5. [XPATH] Erreur XPath sur du multi-thread
    Par pvoncken dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 08/02/2006, 15h19

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