[XSLT] remplacer les retours chariots par des <br />

remplacer les retours chariots par des <br /> [XSLT] - HTML/CSS - Programmation

Marsh Posté le 14-11-2002 à 15:11:23    

bon, ca a l'air tout con, mais j'ai rien trouvé :/
y'a bien translate la dedans http://www.zvon.org/xxl/XSLTrefere [...] -Functions
 
mais ca marche caractère par caractère :/
 
sur google j'ai trouvé 2/3 trucs, mais c'est les mecs qui font un template de 100 lignes juste pour ca, ca peut pas être la meilleure solution  :non:

Reply

Marsh Posté le 14-11-2002 à 15:11:23   

Reply

Marsh Posté le 14-11-2002 à 16:50:40    

si peu de lectures ?

Reply

Marsh Posté le 14-11-2002 à 17:03:10    

lorill a écrit a écrit :

 
sur google j'ai trouvé 2/3 trucs, mais c'est les mecs qui font un template de 100 lignes juste pour ca, ca peut pas être la meilleure solution  :non:  




 
Malheureusement si. J'ai eut le cas aussi (faire une substitution d'un caractère par plusieurs) et ça s'est fini en monstre.


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 14-11-2002 à 17:13:14    

kadreg a écrit a écrit :

 
Malheureusement si. J'ai eut le cas aussi (faire une substitution d'un caractère par plusieurs) et ça s'est fini en monstre.




 
argh !
je vais patcher xalan et rajouter un replace dedans, ca ira plus vite  :na:  
 
mais ils ont pensé a quoi les mecs qui on écrit cette norme ?

Reply

Marsh Posté le 14-11-2002 à 17:14:47    

lorill a écrit a écrit :

 
mais ils ont pensé a quoi les mecs qui on écrit cette norme ?




 
Ils l'ont fait le replace, mais un caractère par un caractère :D


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 14-11-2002 à 18:03:08    

Salut,  
 
Il faut s'y prendre de façon récursive comme dans le stylesheet suivant (j'espère que ce sera lisible :-):  
 


<?xml version="1.0" encoding="ISO-8859-1"?>
 
<!-- substitute CR in xml code with <BR /> 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"><!-- c'est ton CR (retour chariot) -->
    <xsl:text>
</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()"><!-- remplace le match par l'élément ad hoc -->
    <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 -->

 
 
Bonne continuation et a demain! Avander
 
PS: Désolé, les smilies j'y suis pour rien!


Message édité par avander le 15-11-2002 à 09:12:49

---------------
A thing of beauty is a joy forever (John Keats)
Reply

Marsh Posté le 14-11-2002 à 18:43:32    

c'est quand même un peu lourd, mais merci  :jap:  
 
et le caractère \n, y'a une entité pour ca ?

Reply

Marsh Posté le 14-11-2002 à 18:56:43    

lorill a écrit a écrit :

c'est quand même un peu lourd, mais merci  :jap:  
 
et le caractère \n, y'a une entité pour ca ?



&x0A; ? (et &x0D; pour son copain \r)


Message édité par gm_superstar le 14-11-2002 à 18:56:56

---------------
Incongru : une FAQ abandonnée sur les Standards du Web - FAQ périmée de blabla@Prog
Reply

Marsh Posté le 14-11-2002 à 18:58:11    

Avander a écrit a écrit :

PS: Désolé, les smilies j'y suis pour rien!



> Tu peux éditer ton message et le mettre entre des balises [ fixed] [/ fixed]
 
> Sinon il y a l'option "Désactiver les smilies" lorsqu'on rédige le message une première fois.


---------------
Incongru : une FAQ abandonnée sur les Standards du Web - FAQ périmée de blabla@Prog
Reply

Marsh Posté le 14-11-2002 à 19:00:14    

gm_superstar a écrit a écrit :

 
&x0A; ? (et &x0D; pour son copain \r)




 
ah merde ouais, j'avais pas pensé a l'unicode  :)

Reply

Marsh Posté le 14-11-2002 à 19:00:14   

Reply

Marsh Posté le 15-11-2002 à 09:23:24    

Pour gm_superstar :  
- Merci pour les balises [fixed] et les entités ! (En fait je viens de comprendre les icones dans l'éditeur des messages :-O)
 
Pour lorill:
- C'est un stylesheet basique qu'il faut toujours avoir sous la main, si tu le modifie pour qu'il accepte en paramètre le string à remplacer et le string remplaçant tu obtient une fonction find/replace que tu peux lancer avant ou après d'autres transformations.  
 
Un autre stylesheet du même genre serait un transformation qui s'occupe de formater convenablement n'importe quel fichier xml (indentation) ou qui remplace certains elements par d'autres.  
 
Bye. Avander


Message édité par avander le 15-11-2002 à 09:24:44

---------------
A thing of beauty is a joy forever (John Keats)
Reply

Marsh Posté le 02-12-2002 à 14:42:01    

gm_superstar a écrit a écrit :

 
&x0A; ? (et &x0D; pour son copain \r)




marche pas :(
 
Référence a une entité non définie qu'il me dit. Ce qui est plutôt logique, mais je vois pas comment je peux la définir...

Reply

Marsh Posté le 02-12-2002 à 14:56:53    

par contre le coup de faire une variable passe.
 

Code :
  1. <xsl:variable name="gReplace">
  2. <xsl:text>
  3. </xsl:text></xsl:variable>

Reply

Marsh Posté le 02-12-2002 à 17:52:19    

Si c'est pour inscrire les données saisies dans un textarea dans ta BD en conservant les sauts de ligne et que tu peux faire du javascript :
 
function replaceN(thisElement)
{
thisElement.value=thisElement.value.replace(/\n/g, "<br />" );  
}

Reply

Marsh Posté le 02-12-2002 à 17:55:42    

chocoboy a écrit a écrit :

Si c'est pour inscrire les données saisies dans un textarea dans ta BD en conservant les sauts de ligne et que tu peux faire du javascript :
 
function replaceN(thisElement)
{
thisElement.value=thisElement.value.replace(/\n/g, "<br />" );  
}




Bien tenté mais non. Sans conter que c'est hyper crade de stocker du html en base de données.
 
De toutes façon c'est bon maintenant (merci Avander)

Reply

Marsh Posté le 02-12-2002 à 18:04:56    

lorill a écrit a écrit :

 
Bien tenté mais non. Sans conter que c'est hyper crade de stocker du html en base de données.
 
De toutes façon c'est bon maintenant (merci Avander)




 
ah bon pourquoi ? moi je stocke du XML en BD...

Reply

Marsh Posté le 02-12-2002 à 18:06:02    

chocoboy a écrit a écrit :

 
ah bon pourquoi ? moi je stocke du XML en BD...




 
 :heink:


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 02-12-2002 à 18:08:19    

chocoboy a écrit a écrit :

 
ah bon pourquoi ? moi je stocke du XML en BD...




c'est déja moins pire.
tu as déja entendu parler de séparation présentation/contenu ?
mes bases, elles en servent pas que pour le web  [:sinclaire]

Reply

Marsh Posté le 02-12-2002 à 18:10:08    

lorill a écrit a écrit :

 
c'est déja moins pire.
tu as déja entendu parler de séparation présentation/contenu ?
mes bases, elles en servent pas que pour le web  [:sinclaire]  




 
c'est quoi la séparation présentation/contenu ???

Reply

Marsh Posté le 02-12-2002 à 18:11:14    

kadreg a écrit a écrit :

 
 
 :heink:  




vas y , développe, je serais moins bête ce soir en me couchant...

Reply

Marsh Posté le 02-12-2002 à 18:17:03    

chocoboy a écrit a écrit :

 
vas y , développe, je serais moins bête ce soir en me couchant...




 
Soit un morceau de XML :
 
<personne>
    <nom>toto</nom>
    <prenom>titi</prenom>
    <addresse>DTC</addresse>
</personne>
 
On a ici une information structurée. N'as-tu pas l'impression que ce type de structure peut se retrouver au niveau de la structure de la base ? Genre une table personne, avec des champs noms, prenoms et addresse ?
 
Mettre du XML en base me donne l'impression qu'on a fait un vilain mélange au niveau de la structure de données. Maintenant, on peut avoir réellement besoin de mettre du XML en base (je peux t'en trouver des cas), mais ça ne me semble pas dans l'ordre naturel des choses.


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 02-12-2002 à 18:18:50    

kadreg a écrit a écrit :

 
Mettre du XML en base me donne l'impression qu'on a fait un vilain mélange au niveau de la structure de données. Maintenant, on peut avoir réellement besoin de mettre du XML en base (je peux t'en trouver des cas), mais ça ne me semble pas dans l'ordre naturel des choses.




ben déja si on utilise pas une base relationnelle...
mais perso si je dois avoir du xml sorti d'une base, je préfère le générer en fonctions des données dans la base

Reply

Marsh Posté le 02-12-2002 à 18:25:29    

voilà pourquoi j'utilise une structure hybride relationnel/XML (voir le pavé XML et les bases de données chez Wrox) : je développe un outil de gestion de contenu... dans ce cas précis, l'insertion d'XML dans une BD relationnel t'évite de complexifier ta base et donc des centaines de jointures inutiles : c'est très classique dans le domaine de l'édition de document... imagines un truc genre :
 
<document>
  <paragraph>
    <element type="text">Mon texte</element>
    <element type="image" src="image.jgp" path="http://..." mode="portrait">  
  etc...
  </paragraph>
</document>
 
bref, un truc susceptible de te traduire toutes les possibilités d'édition propre au HTMl tout en dissociant contenu et présentation (donc je génère du XML à partir de plusieurs base, puis j'aggrège avant transformation vers XHTML)... la je vois pas trop comment faire sans inclue des Blob XML dans ta base...  :??:  

Reply

Marsh Posté le 02-12-2002 à 18:30:28    

en fait au départ, j'était parti sur du tout relationnel... je me suis vite rendu compte que ce serait impossible (MCD incomplet faisant 10m sur 5 !)
L'insert d'XML en remplacement de certaines colonnes t'offre une simplification et une évolutivité de ta base extraordinaire  :love:
 
d'ailleurs, c'est comme ça que font la plupart des providers de contenu et la plupart des gros sites nécessitant une mise à jour très fréquente et aggrégeant des sources très hétérogènes...


Message édité par chocoboy le 02-12-2002 à 18:32:48
Reply

Marsh Posté le 02-12-2002 à 18:38:50    

lorill a écrit a écrit :

 
Bien tenté mais non. Sans conter que c'est hyper crade de stocker du html en base de données.
 
De toutes façon c'est bon maintenant (merci Avander)




 
pour en revenir à ton problème : comme dans mon système, je génère le XML à la volée et je fais la transformation XSLT côté seveur, je préfère effectuer les conversions de caractères en javascript avant d'insérer dans la base : ca m'évite d'alourdir avec une transformation systématique via XSLT... c'est plus court et plus rapide.

Reply

Marsh Posté le 02-12-2002 à 18:47:50    

chocoboy a écrit a écrit :

 
pour en revenir à ton problème : comme dans mon système, je génère le XML à la volée et je fais la transformation XSLT côté seveur, je préfère effectuer les conversions de caractères en javascript avant d'insérer dans la base : ca m'évite d'alourdir avec une transformation systématique via XSLT... c'est plus court et plus rapide.




j'aurais du expliquer mon "non" :
- je stocke le resultat de la saisie dans des fichiers xml
- ca m'emmerde de modifier ma dtd pour accepter des <br/> n'importe ou
- une grosse partie des fichiers xml existent déja (donc pas de saisie)

Reply

Marsh Posté le 02-12-2002 à 19:16:12    

lorill a écrit a écrit :

 
j'aurais du expliquer mon "non" :
- je stocke le resultat de la saisie dans des fichiers xml
- ca m'emmerde de modifier ma dtd pour accepter des <br/> n'importe ou
- une grosse partie des fichiers xml existent déja (donc pas de saisie)




 
Dans ma structure, le <br /> est reconnu comme texte et non noeud (pas besoin de modifier la DTD).
Au fait, une question, j'aimerai savoir comment tu indexes tes fichiers XML dans ton système, est ce que tu en gère beaucoup, les utilisateurs peuvent ils les modifier ...etc ?
Qu'en est_il chez toi de la vitesse d'aggrégation sur un grand nombre de documents ?

Reply

Marsh Posté le 02-12-2002 à 19:22:47    

chocoboy a écrit a écrit :

 
Au fait, une question, j'aimerai savoir comment tu indexes tes fichiers XML dans ton système



je les indexe pas, ils me servent a générer des pages web semi-statiques (mises a jour tous les 3/4 mois)
 

chocoboy a écrit a écrit :

 
est ce que tu en gère beaucoup




pas trop.. Un peu moins de 200 je pense
 

chocoboy a écrit a écrit :

 
les utilisateurs peuvent ils les modifier




j'ai un xslt qui transforme le xml en formulaire html, mais ils ne le modifient pas, le formulaire génère une copie et l'envoie par mail a la personne chargée de valider le contenu.
 
 

chocoboy a écrit a écrit :

 
Qu'en est_il chez toi de la vitesse d'aggrégation sur un grand nombre de documents ?




mes transformations sont lentes, mais vu mon contexte, je m'en fous un peu.

Reply

Marsh Posté le 02-12-2002 à 19:26:36    

ok merci

Reply

Marsh Posté le 02-12-2002 à 21:47:00    

Avander a écrit a écrit :

 
Un autre stylesheet du même genre serait un transformation qui s'occupe de formater convenablement n'importe quel fichier xml (indentation) ou qui remplace certains elements par d'autres.  
Bye. Avander




Pour l'indentation, XSLT s'en occupe tout seul :
 
<xsl:output indent = "yes">
 
http://www.w3.org/TR/xslt#stylesheet-element
 


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed