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][>HTML] Générer une ancre


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 14
    Points : 13
    Points
    13
    Par défaut [XSLT][>HTML] Générer une ancre
    Bonjour,

    Je cherche à faire un truc simple en xslt et j'utilise jDom.
    Dans mon XML, je spécifie une ancre comme ceci :

    Et je souhaite obtenir la sortie html suivante :

    Le problème, c'est que j'obtiens le code suivant, et ça perturbe le rendu de la page :
    Voici mon bout de code xsl :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:template match="ancre">
      <a>
        <xsl:attribute name="name"><xsl:value-of select="."/></xsl:attribute>
      </a>
    </xsl:template>
    Je suis certain qu'il existe une solution simple, mais quelle est-elle ?
    N'étant pas un pro du XML/XSL [confused]

    Merci de votre aide !!
    y(oYo)

  2. #2
    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,

    une astuce simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	<xsl:template match="ancre">
    		<a>
    			<xsl:attribute name="name"><xsl:value-of select="."/></xsl:attribute>
    			<xsl:text></xsl:text>
    		</a>
    	</xsl:template>
    Le <xsl:text> force la création d'un noeud texte, bien qu'il soit vide. Ca devrait fonctionner avec tous les processeurs XSLT.

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 14
    Points : 13
    Points
    13
    Par défaut Hélas non
    Bonjour et merci pour votre réponse.

    Malheurseuement, cela ne fonctionne pas hélas, voici le résultat :

    Une autre piste ?

    Voici ce que j'ai en entête de ma feuille de style XSL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.1">
    <xsl:output method="xml" version="1.0" omit-xml-declaration="yes" indent="yes"/>
    y(oYo)

  4. #4
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    method="html" est plus aproprié, non ?

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 14
    Points : 13
    Points
    13
    Par défaut Non plus
    Citation Envoyé par Swoög
    method="html" est plus aproprié, non ?
    Ca ne fonctionne pas non plus, j'avais déjà essayé sans succès.
    Voici donc mon entête :
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.1">
    <xsl:output method="html" version="4.01" encoding="ISO-8859-1" omit-xml-declaration="yes" indent="yes"/>

    et mon template pour l'ancre :
    <xsl:template match="ancre">
    <a>
    <xsl:attribute name="name"><xsl:value-of select="."/></xsl:attribute>
    <xsl:text></xsl:text>
    </a>
    </xsl:template>

    Peut-être existe t'il un paramétrage du transformer dans mon code Java pour lui indiquer de forcer la génération des balises fermantes ?

    Voici mon code Java qui tranforme un jDom et un fichier XSL en HTML :

    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
    //On définit un transformer avec la source XSL
    //qui va permettre la transformation
    TransformerFactory factory = TransformerFactory.newInstance();
    Transformer transformer = factory.newTransformer(new StreamSource(fichierXSL));
     
    //On transforme le document JDOMEntree grâce à notre transformer.
    //La méthoded transform() prend en argument le document d'entree associé au transformer
    //et un document JDOMResult, résultat de la transformation TraX
    transformer.transform(new JDOMSource(documentJDOMEntree), documentJDOMSortie);
     
    // Pour récupérer le document JDOM issu de cette transformation
    resultat = documentJDOMSortie.getDocument();
     
    // On prépare le mécanisme de rendu
    XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat());
    // On retourne la réprésentation en String du document
    return outputter.outputString(resultat);

  6. #6
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 14
    Points : 13
    Points
    13
    Par défaut Bon...
    J'ai un peu avancé sur ce sujet là, et voici ce que j'ai trouvé.
    En fait, celà consiste à générer mon ancre "caractère par caractère", au lieu d'utiliser un tag tout propre via le template xsl.

    Ce qui donne ceci dans mon xsl :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:template match="ancre">
    	<xsl:text disable-output-escaping="yes">
    		&lt;a name="toto"&gt;&lt;/a&gt;
    	</xsl:text>
    </xsl:template>
    et qui génère le html suivant :


    Ce qui est bien, mais pas top.
    En effet, il faudrait qu'au lieu de "toto", je récupère le <xsl:value-of select="." />, mais ça plante

  7. #7
    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 faut que tu fractionnes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:text disable-output-escaping="yes">&lt;a name="</xsl:text>
    <xsl:value-of select="."/>
    <xsl:text disable-output-escaping="yes">"&gt;&lt;/a&gt;</xsl:text>
    M'enfin ça reste du code atroce...

  8. #8
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 14
    Points : 13
    Points
    13
    Par défaut Ayé !
    Finalement, je me suis débrouillé à ma manière, en utilisant la technique du pixel transparent, doublé d'un style="visibility:hidden" pour que l'ancre soit toujours active.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <xsl:template match="ancre">
      <a>
        <xsl:attribute name="name"><xsl:value-of select="."/></xsl:attribute>
        <xsl:attribute name="style">visibility:hidden</xsl:attribute>
        <xsl:text disable-output-escaping="yes">&lt;img src="spacer.gif" width="1" height="1"&gt;</xsl:text>
      </a>
    </xsl:template>
    Merci à ceux qui on essayé de m'aider
    y(oYo)

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

Discussions similaires

  1. [XSLT][XML=>HTML] Existe - t - il un tutoriel?
    Par Jean_Benoit dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 23/06/2006, 17h30
  2. XSLT : representation HTML en tableau double entree
    Par samouille666 dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 02/06/2006, 20h18
  3. [XSLT] [XML->HTML] transformation XML -> HTML via XSL
    Par Great Sayaman dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 11/12/2004, 22h12
  4. Réponses: 2
    Dernier message: 05/10/2004, 22h43

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