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 afficher des balises XML dans un attribut ?


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre à l'essai
    Profil pro
    Architecte technique
    Inscrit en
    Juillet 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 13
    Points : 13
    Points
    13
    Par défaut XSLT : Comment afficher des balises XML dans un attribut ?
    Bonjour,

    Mon but est de générer une page HTML à partir d'un document XML via une transformation XSLT.

    Seulement, dans le code html que je dois générer, je fais appel à une fonction javascript dans l'attribut onLoad, et cette fonction prend en paramètre un string contenant du code XML, du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <img onload="javascript:monObjet.maFonction('<hello>salut<nom>moi</nom></hello>')" />
    Je récupère le code <hello>salut</hello> à partir d'un autre fichier XML grâce à la fonction document

    Pour faire cela, j'utilise, dans un template, le bout de code xslt suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <xsl:element name="img">
    <xsl:attribute name="onload">
    <xsl:text>javascript:monObjet.maFonction('</xsl:text>
    <xsl:copy-of select="document('hello.xml')//hello" />
    <xsl:text>')"</xsl:text>
    </xsl:attribute>
    </xsl:element>
    Mon problème, c'est que ce bout de code ne marche pas : en effet, le code xml que je veux passer en paramère à ma fonction ne s'affiche pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <img onload="javascript:monObjet.maFonction('')" />
    Aidez-moi à trouver la solution à mon problème s'il vous plait

    Merci d'avance.

  2. #2
    Membre actif
    Homme Profil pro
    Analyst
    Inscrit en
    Juillet 2008
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyst
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 150
    Points : 217
    Points
    217
    Par défaut Solution
    Bonsoir,
    J'ai fait l'essai et ça a fonctionner en récupérant text():
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:copy-of select="document('hello.xml')/hello/text()" />

  3. #3
    Membre à l'essai
    Profil pro
    Architecte technique
    Inscrit en
    Juillet 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 13
    Points : 13
    Points
    13
    Par défaut
    Tout d'abord, merci pour ta réponse ElbeDD.

    Seulement, le fait de rajouter text() va m'afficher le contenu textuel des noeuds sans les balises, or ce n'est pas ce qu'il me faut

    Ce que je veux obtenir c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onLoad="javascript:monObjet.maFonction('<hello>salut<nom>moi</nom></hello>')"
    et non pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onLoad="javascript:monObjet.maFonction('salut moi nom')"
    Je sais, c'est subtil, mais je n'ai pas le choix !!!

  4. #4
    Membre actif
    Homme Profil pro
    Analyst
    Inscrit en
    Juillet 2008
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyst
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 150
    Points : 217
    Points
    217
    Par défaut Méthode
    Bonjour,
    J'ai pas trouvé plus simple que de faire une fonction qui "désérialise" le noeud:
    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
     
    <xsl:template match="/">
     
    <xsl:element name="img">
    <xsl:attribute name="onload">
    <xsl:text>javascript:monObjet.maFonction('</xsl:text>
     
    <xsl:call-template name="getBalise4">
            <xsl:with-param name="node1" select="document('hello.xml')/hello" />
    </xsl:call-template>
    <xsl:text>')</xsl:text>
     
    </xsl:attribute>
    </xsl:element>
     
     
    </xsl:template>
     
     
    <xsl:template name="getBalise4">
    	<xsl:param name="node1" />
     
    	<xsl:text>&lt;</xsl:text>
    	<xsl:value-of select="name($node1)" />
     
    	<xsl:text>&gt;</xsl:text>
    	<xsl:value-of select="$node1/text()"/>
     
    	<xsl:for-each select="$node1/*">
    		<xsl:call-template name="getBalise4">
    	        	<xsl:with-param name="node1" select="." />
    		</xsl:call-template>
    	</xsl:for-each>
     
    	<xsl:text>&lt;/</xsl:text>
    	<xsl:value-of select="name($node1)" />
    	<xsl:text>&gt;</xsl:text>	
     
    </xsl:template>
     
    </xsl:stylesheet>
    Ca ne gere pas les attributs

  5. #5
    Membre à l'essai
    Profil pro
    Architecte technique
    Inscrit en
    Juillet 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 13
    Points : 13
    Points
    13
    Par défaut
    Salut ElbeDD,

    Désolé pour ma réponse un peu (trop ) tardive, mais finalement j'ai trouvé la solution à mon problème.
    En fait, le fait de rajouter du code xml dans un attribut d'une balise html semble perturber le comportement du parseur XSLT (celui utilisé par défaut par java, c'est xalan je crois).
    J'ai contourné le problème en créant une variable globale javascript qui contient mon code xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <script language="Javascript">
       <xsl:text>var monCodeXml='</xsl:text>
       <xsl:copy-of select="document('hello.xml')//hello" />
       <xsl:text>';</xsl:text>
    </script>
    Ensuite j'ai fait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <img onload="javascript:monObjet.maFonction(monCodeXml)" />
    Et voila !
    Bon, ensuite il faut juste faire attention à supprimer les sauts de ligne, parce que Javascript ne tolère pas qu'on écrie un string sur plusieurs lignes .

    Merci encore !

  6. #6
    Membre éprouvé Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Points : 1 247
    Points
    1 247
    Par défaut
    Pour une compatibilité avec un maximum de navigateurs, il faudrait faire une sérialisation afin que les caractères <, > et & soient bien remplacés par les entités équivalentes.

    En XSLT 1.0, il faut faire cela à l'aide de templates.

    Mon projet d'implémentation de la recommandation XForms avec XSLT 1.0 comporte cette fonctionnalité. Vous pouvez aller voir sur le dépôt SVN : http://xsltforms.svn.sourceforge.net...lt/xml2string/
    Formulaires XForms sur tous navigateurs sans extension à installer (architecture XRX) : http://www.agencexml.com/xsltforms/

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

Discussions similaires

  1. [XML] [Débutant]Comment ajouter des balise html dans un fichier XML
    Par pierrot10 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 18/09/2010, 14h36
  2. Réponses: 1
    Dernier message: 05/01/2008, 20h09
  3. Afficher des balises HTML dans une chaine javascript
    Par lapaupiette dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 07/03/2007, 10h19
  4. [XSLT] Comment inclure une balise xsl dans une balise html
    Par sylsau dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 13/10/2006, 09h33
  5. [XSLT][>HTML]Affiché des balises HTML
    Par tiboel dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 26/06/2006, 20h15

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