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 :

interpretation code HTML issu d'un fichier XML sans être échappé par XSLT


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 35
    Par défaut interpretation code HTML issu d'un fichier XML sans être échappé par XSLT
    Bonjour à tous,

    j'aimerais pouvoir utiliser des balises html en sortie en combinant XML et XSLT.

    Mon but premier était de pouvoir intégrer des retours chariots dans mes noeuds de texte XML.
    - En mentionnant des "<br />" en dur dans le code ils sont supprimés par XSL.
    - En ajoutant les balises "cdata" ils sont présents mais convertis et non interprétés par le navigateur en tant que balise html mais comme texte, on peut donc lire le "<br />" à l'écran.

    Pour palier à cela, j'ai mis en place une fonction de remplacement de chaîne au sein du fichier XSL. Le remplacement fonctionne, je peux remplacer la chaine "monBR" récupérer dans le XML par une autre chaine de mon choix. Toutefois, cela ne me permet pas de mettre des balises du type "<br />" (qui n'est pas perçue comme une chaine banale).

    Du coup, savez-vous comment je peux faire pour remplacer un pattern (provenant du XML) par du html (via une fonction dans le xsl) qui sera interprété en sortie par le navigateur.

    Remarque : mon but n'est pas seulement de faire un retour chariot, en effet, par la suite, j'aimerais enrichir ma fonction de remplacement de chaine pour créer une liste à puce en remplaçant par exemple tous les pattern "monUlOuvrant" par "<ul>" etc ...


    Merci d'avance pour vos suggestions.


    1) mon fichier xml (test.xml)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="test.xsl"?>
    <record>
    	<textDescription>
    		Levels in the levels node are L1 toto L2 toti myBR bidule suite du texte a la ligne
    		<u>salut</u>
    	</textDescription>
    </record>

    2) Mon fichier xslt (test.xsl):
    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
     
    <?xml version="1.0" encoding="utf-8"?>
    <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:scr="urn:scr.this">
    <xsl:output method="html" encoding="utf-8" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
     
    <!-- fonction de remplacement avec 3 parametres : text brut, pattern a rechercher, texte de remplacement -->
    <xsl:template name="string-replace-all">
    	<xsl:param name="text" />
    	<xsl:choose>
    	  <xsl:when test="contains($text, 'myBR')">
    		<xsl:value-of select="substring-before($text,'myBR')" />
    		<xsl:value-of select="theBR" />
    		<xsl:call-template name="string-replace-all">
    		  <xsl:with-param name="text"
    		  select="substring-after($text,'myBR')" />
    		</xsl:call-template>
    	  </xsl:when>
    	  <xsl:otherwise>
    		<xsl:value-of select="$text" />
    	  </xsl:otherwise>
    	</xsl:choose>
    </xsl:template>
     
     
     <!-- debut nouvelles fonctions -->
    	<!-- appel successif de la fonction string-replace-all pour des patterns connus a remplacer -->
     
    <xsl:template name="quote.string">
      <!-- Chaîne reçue en paramètre -->
      <xsl:param name="string"/>
      <xsl:choose>
        <xsl:when test="contains($string, 'myBR')">
          <xsl:call-template name="string-replace-all">
            <xsl:with-param name="text" 		select="$string"/>
            <!-- <xsl:with-param name="replace" select="'&quot;'"/> -->
    		<xsl:with-param name="replace" select="'myBR'"/>
    		<xsl:with-param name="by"   		select="'RetourLigne'"/>
          </xsl:call-template>
        </xsl:when>
        <xsl:otherwise>
          <xsl:value-of select="$string"/>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:template>	
     
     
     <!-- fonction de remplacement de caractere qui prend en parametre : le texte brut, la valeur a rechercher, la valeur a remplacer -->
     <xsl:template name="string-replace-all">
        <xsl:param name="text" />
        <xsl:param name="replace" />
        <xsl:param name="by" />
        <xsl:choose>
          <xsl:when test="contains($text, $replace)">
            <xsl:value-of select="substring-before($text,$replace)" />
            <xsl:value-of select="$by" />
            <xsl:call-template name="string-replace-all">
              <xsl:with-param name="text"
              select="substring-after($text,$replace)" />
              <xsl:with-param name="replace" select="$replace" />
              <xsl:with-param name="by" select="$by" />
            </xsl:call-template>
          </xsl:when>
          <xsl:otherwise>
            <xsl:value-of select="$text" />
          </xsl:otherwise>
        </xsl:choose>
      </xsl:template>
     <!-- fin nouvelles fonctions -->
     
     
    <xsl:template match="/"> <!-- on lance le template ci-dessous -->
    	<xsl:for-each select="record">
    		<xsl:for-each select="textDescription">
     
    			<xsl:call-template name="quote.string">
    				<xsl:with-param name="string" select="current()" />
    			</xsl:call-template>
     
    		</xsl:for-each>
    	</xsl:for-each>
     
    </xsl:template> 
     
    </xsl:stylesheet>
    3)

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Tout cela est inutile, <br/> fonctionnant parfaitement, bien que souvent moins pratique que <p> ... </p>.

    Prouve-nous le contraire.

    Dans le xml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <text>Ceci est un texte <br/>sur plusieurs lignes</text>
    Dans le XSLT :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <xsl:template match="/">
      <xsl:apply-templates/>
    </xsl:template>
     
    <xsl:template match="text">
      <p><xsl:apply-templates/></p>
    </xsl:template>
     
    <xsl:template match="br">
      <br/>
    </xsl:template>
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 35
    Par défaut
    Effectivement, ta solution fonctionne très bien.

    Pas toujours facile de faire simple.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 11/12/2007, 11h59
  2. [XML] Code PHP pour traitement de fichier XML
    Par gaggy dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 12/09/2007, 18h44
  3. Executer un code en java sur plusieurs fichiers xml en même temps
    Par med_ellouze dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 12/08/2007, 16h33
  4. interpretation code html avec Persits.MailSender
    Par boss_gama dans le forum ASP
    Réponses: 11
    Dernier message: 07/07/2006, 10h41
  5. Ecriture de code html issu d'un tag dans un pop-up ?
    Par ouioui2000 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 12/09/2005, 11h34

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