Produire une nouvelle ligne en XSLT

Je veux produire une nouvelle ligne pour la sortie de texte dans XSLT. Des idées?

Le code XSL suivant produira un caractère de nouvelle ligne ( saut de ligne):


 

Pour un retour chariot , utilisez:

 
 

Ma méthode préférée pour faire cela ressemble à ceci:

      ...  

Ensuite, chaque fois que vous voulez sortir une nouvelle ligne (peut-être dans csv), vous pouvez générer quelque chose comme:

  

J’ai utilisé cette technique lors de la sortie de SQL depuis une entrée XML. En fait, j’ai tendance à créer des variables pour les virgules, les guillemets et les nouvelles lignes.

Incluez l’atsortingbut Method = “text” sur la balise xsl: output et incluez les nouvelles lignes dans votre contenu littéral dans le XSL aux points appropriés. Si vous préférez conserver le code source de votre XSL, utilisez l’entité où vous voulez une nouvelle ligne.

Vous pouvez utiliser:

voir l’exemple

   =  
  

si vous écrivez ceci dans un fichier, par exemple

    

cette variable produira une nouvelle ligne infile comme:

 commons-dbcp_commons-dbcp = 1.2.2 junit_junit = 4.4 org.easymock_easymock = 2.4 

J’ai ajouté la directive DOCTYPE vous voyez ici:

   ]>  

Cela me permet d’utiliser &nl; au lieu de pour produire une nouvelle ligne dans la sortie. Comme d’autres solutions, elle est généralement placée dans une .

À mon humble avis, il n’y a pas besoin de plus d’informations que @Florjon. Peut-être que certains petits détails sont laissés pour comprendre pourquoi cela pourrait ne pas fonctionner parfois pour nous.

Tout d’abord, le (hex) ou (dec) à l’intérieur d’un fonctionnera toujours, mais vous ne le verrez peut-être pas.

  1. Il n’y a pas de nouvelle ligne dans un balisage HTML. Utiliser un simple
    fera l’affaire. Sinon, vous verrez un espace blanc. L’affichage de la source depuis le navigateur vous indiquera ce qui s’est réellement passé. Cependant, il y a des cas où vous vous attendez à ce comportement, surtout si le consommateur n’est pas directement un navigateur. Par exemple, vous souhaitez créer une page HTML et afficher sa structure formatée correctement avec des lignes vides et des identifiants avant de la diffuser au navigateur.
  2. Rappelez-vous où vous devez utiliser disable-output-escaping et où vous ne voulez pas. Prenons l’exemple suivant où j’ai dû créer un fichier XML à partir d’un autre et déclarer sa DTD à partir d’une feuille de style.

La première version échappe aux caractères (par défaut pour xsl: text)

    <!DOCTYPE Subscriptions SYSTEM "Subscriptions.dtd">


           

Et voici le résultat:

  <!DOCTYPE Subscriptions SYSTEM "Subscriptions.dtd"> 
   

Ok, il fait ce que nous attendons, échapper est fait pour que les caractères que nous avons utilisés sont affichés correctement. Le format de la partie XML à l’intérieur du nœud racine est géré par ident="yes" . Mais en y regardant de plus près, nous voyons que le caractère de nouvelle ligne n’a pas été échappé et traduit tel quel, effectuant un double saut de ligne! Je n’ai pas d’explication à ce sujet, ce sera bon à savoir. N’importe qui?

La deuxième version n’échappe pas aux personnages, ils produisent donc ce à quoi ils sont destinés. Le changement effectué était:

 <!DOCTYPE Subscriptions SYSTEM "Subscriptions.dtd">


 

Et voici le résultat:

      

et ça ira. Cr et lf sont correctement rendus.

  1. N’oubliez pas que nous parlons de nl , pas de crlf ( nl=lf ). Ma première tentative a été d’utiliser uniquement cr: et tandis que la sortie xml a été validée par DOM correctement.

Je regardais un fichier XML corrompu:

  riptions SYSTEM "Subscriptions.dtd">   

L’parsingur de DOM n’a pas tenu compte des caractères de contrôle, mais le rendu n’a pas été fait. J’ai passé pas mal de temps à me cogner la tête avant de réaliser à quel point je ne voyais pas ça comme ça!

Pour mémoire, j’utilise une variable à l’intérieur du corps avec les deux CRLF pour être sûr à 100% qu’elle fonctionnera partout.

J’ai trouvé une différence entre les nouvelles lignes littérales dans et les nouvelles lignes littérales utilisant .

Alors que les nouvelles lignes littérales fonctionnaient correctement dans mon environnement (en utilisant à la fois Saxon et le processeur Java XSLT par défaut), mon code a échoué lorsqu’il a été exécuté par un autre groupe exécuté dans un environnement .NET.

Le passage à des entités ( ) a permis à mon code de génération de fichiers de fonctionner de manière cohérente sur Java et .NET.

En outre, les nouvelles lignes littérales sont susceptibles d’être reformatées par les EDI et peuvent être perdues par inadvertance lorsque le fichier est géré par une personne «qui n’est pas au courant».

D’après mon expérience, la production d’une nouvelle ligne INSIDE dans une clause ne fonctionne pas. J’essayais de faire quelque chose comme:

    My value:     My other value:      

Tout ce que j’ai essayé de mettre dans cette “nouvelle ligne” (le nœud vide ) ne fonctionnait tout simplement pas (y compris la plupart des suggestions les plus simples de cette page), sans parler du fait que le HTML ne fonctionnait pas. là-bas, donc finalement j’ai dû le diviser en 2 variables, les appeler en dehors de la scope et mettre un simple
entre eux, à savoir:

    My value:         My other value:      

Oui, je sais, ce n’est pas la solution la plus sophistiquée mais ça marche, je partage mon expérience de frustration avec les XSL;)

J’appuie la méthode de Nic Gibson, c’était toujours ma préférée:

   

Cependant, j’ai utilisé la tâche Ant pour créer des feuilles de style et les exécuter sur des fichiers. La tâche réalisera des modèles de valeur d’atsortingbut, par exemple $ {DSTAMP}, mais reformatera également votre fichier XML. Dans certains cas, la référence d’entité est préférable.

 
 

Je ne pouvais pas simplement utiliser l’approche car si je formate le fichier XML en utilisant XSLT, l’entité disparaîtra. Je devais donc utiliser une approche légèrement plus ronde en utilisant des variables

      

Tu peux essayer,

 
 

Ça va marcher.

ajoutez simplement cette balise:

 

ça marche pour moi 😉 .