Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1895 connectés 

  FORUM HardWare.fr
  Programmation
  XML/XSL

  [XML/XSL] garder le retour à la ligne d'un CDATA

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[XML/XSL] garder le retour à la ligne d'un CDATA

n°458443
SoWhatIn22
Posté le 15-07-2003 à 16:19:20  profilanswer
 

Bonjour,
 
je dois formater un document XML en document html. Pour cela, j'applique des XSLT. Mon probème vient du contenu des sections CDATA. Ces sections contiennent du texte que je reçois par le réseaux, et je voudrais pouvoir les afficher tel qu'elles arrivent. Le soucis, c'est que le retour chariot n'est pas compris par les browser. Il faudrait donc que pour ces sections, je remplace touts les charactères '\n' par une balise <br/>.
Comment spécifier cela dans la feuiile de style? J'essaye de voir du côté de xpath, mais c'est assez confus pour moi.
 
Si vous avez une idée ou un conseil, merci d'avance.

mood
Publicité
Posté le 15-07-2003 à 16:19:20  profilanswer
 

n°458538
avander
Posté le 15-07-2003 à 17:08:33  profilanswer
 

C'est juste un XSLT de plus a appliquer avec un template récursif :-). J'ai utilisé celui-ci avec MSXML 3.0 pour remplacer de retour chariot par des tag br.
 
 


<?xml version="1.0" encoding="ISO-8859-1"?>
 
<!-- gReplaces text in xml code with markup -->
 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
 
<!-- general settings -->
  <xsl:output method="xml" omit-xml-declaration="no" encoding="ISO-8859-1"/>
 
<!-- global variables -->
  <xsl:variable name="gReplace">
    <xsl:text>\n</xsl:text></xsl:variable>
 
<!-- transformations -->
 
  <xsl:template match="*">
    <xsl:copy>
      <xsl:copy-of select="@*"/>
      <xsl:apply-templates/>
    </xsl:copy>
  </xsl:template>
 
 
  <xsl:template match="//code/text()"><!-- /!\ mod ici -->
    <xsl:call-template name="doReplace">
      <xsl:with-param name="text" select="."/>
    </xsl:call-template>
 
  </xsl:template>
 
 
  <xsl:template name="doReplace">
    <xsl:param name="text"/>
 
    <xsl:choose>
      <xsl:when test="contains( $text, $gReplace)">
        <xsl:value-of select="substring-before( $text, $gReplace)"/>
        <!-- substitue gReplace occurence with <BR /> string -->
        <xsl:element name="br"/>
        <xsl:call-template name="doReplace"><!-- recurse -->
          <xsl:with-param name="text" select="substring-after( $text, $gReplace)"/>
        </xsl:call-template>
      </xsl:when>
      <xsl:otherwise>
        <xsl:value-of select="$text"/>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>
 
</xsl:stylesheet>
<!-- eof -->


 
L'exemple est basé sur celui de Michael Kay dans XSLT Programmer's reference. Moi c'est l'usage des CDATA qui m'inquiète...
 
A+
 


---------------
A thing of beauty is a joy forever (John Keats)
n°458999
Toucouch
Posté le 16-07-2003 à 02:47:08  profilanswer
 

sowhatin22 a écrit :

Bonjour,
 
je dois formater un document XML en document html. Pour cela, j'applique des XSLT. Mon probème vient du contenu des sections CDATA. Ces sections contiennent du texte que je reçois par le réseaux, et je voudrais pouvoir les afficher tel qu'elles arrivent. Le soucis, c'est que le retour chariot n'est pas compris par les browser. Il faudrait donc que pour ces sections, je remplace touts les charactères '\n' par une balise <br/>.
Comment spécifier cela dans la feuiile de style? J'essaye de voir du côté de xpath, mais c'est assez confus pour moi.
 
Si vous avez une idée ou un conseil, merci d'avance.


Tu ne peux pas utiliser des balises <pre>...</pre> ou utiliser l'option CSS "white-space:pre;" ?

n°459012
SoWhatIn22
Posté le 16-07-2003 à 08:07:04  profilanswer
 

je peux m'en sortir avec ca:
 
 


 
<xsl:template name="br-replace">
   <xsl:param name="word"/>
<!-- </xsl:text> on next line on purpose to get newline -->
   <xsl:variable name="cr"><xsl:text>
</xsl:text></xsl:variable>
   <xsl:choose>
   <xsl:when test="contains($word,$cr)">
       <xsl:value-of select="substring-before($word,$cr)"/>
       <br/>
       <xsl:call-template name="br-replace">
         <xsl:with-param name="word"  
             select="substring-after($word,$cr)"/>
       </xsl:call-template>
   </xsl:when>
   <xsl:otherwise>
     <xsl:value-of select="$word"/>
   </xsl:otherwise>
  </xsl:choose>
 </xsl:template>
 


 
Avander:
Les CDATA, c'est pour ne pas perdre le formattage des messages que je reçois. Ce sont des messages au format texte, et je veux les afficher sans modifications. Je ne vois pas quel autre choix j'ai, sachant que je ne connais pas le contenu de ces messages. Si un message contient des balises, je veux les afficher et non pas les interpréter...
 
Toucouch:
je vais quand même regarder de ce dont tu me parles. Ca fait un moment que je n'ai pas fait de html et de css...
 
merci!
 

n°459810
Toucouch
Posté le 17-07-2003 à 00:28:14  profilanswer
 

sowhatin22 a écrit :

...
Avander:
Les CDATA, c'est pour ne pas perdre le formattage des messages que je reçois. Ce sont des messages au format texte, et je veux les afficher sans modifications. Je ne vois pas quel autre choix j'ai, sachant que je ne connais pas le contenu de ces messages. Si un message contient des balises, je veux les afficher et non pas les interpréter...
 
Toucouch:
je vais quand même regarder de ce dont tu me parles. Ca fait un moment que je n'ai pas fait de html et de css...
 
merci!


Un exemple à la con...
 
Fichier XML de départ:

Code :
  1. <texte>[!CDATA[Salut Robert!
  2. Pense à ramener du pain pour midi...
  3. A+]]</texte>


 
Fichier XSLT:

Code :
  1. <xsl:template select="texte">
  2.   <pre><xsl:value-of select="."/></pre>


 
Résultat HTML:
 

Code :
  1. <pre>Salut Robert!
  2. Pense à ramener du pain pour midi...
  3. A+</pre>


 
Avec la balise <pre></pre>, le texte inclus est affiché en gardant les espaces et les retours à la ligne. Si je ne dit pas de connerie, c'est ce qui doit être utilisé sur ce forum avec les balises fixed, code ou cpp...

n°459863
SoWhatIn22
Posté le 17-07-2003 à 08:44:16  profilanswer
 

Toucouch a écrit :


Avec la balise <pre></pre>, le texte inclus est affiché en gardant les espaces et les retours à la ligne. Si je ne dit pas de connerie, c'est ce qui doit être utilisé sur ce forum avec les balises fixed, code ou cpp...


 
en effet, cela marche bien. Et c'est quand même plus propre que la manip que je me voyais obliger de faire...
Je te remercie donc.

n°2069313
meliweb
Posté le 11-04-2011 à 22:15:42  profilanswer
 

Je sais bien que ce message date de 2003, pourtant c'est la réponse que j'ai trouvé sur le net qui était la plus proche de ma problématique, et de ma solution (enfin trouvée en bonne partie grâce à ce post !).
Je poste pour d'autres, au cas où...
 
Voici la problématique avec Sharepoint 2010 : lorqu'on saisie des données dans une textebox (champs multiligne) on ne voit pas à l'affichage de notre formulaire les retours chariots (ou retours à la ligne). Ce que bien gênant. Bien sur certains parlent de faire des "translate" dans la page <xsl>, mais bon ce n'est pas super pratique.
 
Voici la solution avec Sharepoint Designer 2010 : lorsque vous créez un affichage personnalisé de votre liste, SPD construit lui aussi une seule ligne. Cependant en allant dans les propriétés de la balise <TD>, dans le style, dans la catégorie Bloc, vous trouverez l'option white-space ! Le seul qui preserv les retours à la ligne est l'option "pre".
 
Pour rappel les autres options sont décrites ici : <a href="http://www.w3schools.com/css/pr_text_white-space.asp" target="_blank">w3schools</a>
 
Dans le développement (en c#), à un autre endroit, j'utilise une petite fonction que j'ai du construire, mais bon avec Designer on est censé pouvoir faire un minimum de code.  
 
Voilà, si ça intéresse d'autre personnes pour Sharepoint Designer...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  XML/XSL

  [XML/XSL] garder le retour à la ligne d'un CDATA

 

Sujets relatifs
[XML/XSL]probleme de lien[XML/SXL]Probleme d'arborescence
gestion des sessions avec XML[XSL] syntaxe de Xpath
[ASP] Extraire des données XML avec l'object XMLDOMInfobulle et retour à la ligne
Problème de retour à la ligne 
Plus de sujets relatifs à : [XML/XSL] garder le retour à la ligne d'un CDATA


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR