La production d'une nouvelle ligne dans XSLT
Je veux produire un retour à la ligne pour la sortie de texte en XSLT. Des idées?
- Je pense, il est temps d'accepter la réponse 🙂
Vous devez vous connecter pour publier un commentaire.
Je veux produire un retour à la ligne pour la sortie de texte en XSLT. Des idées?
Vous devez vous connecter pour publier un commentaire.
Le code XSL suivant va produire un de retour à la ligne (saut de ligne) caractère:
Pour un retour chariot, utilisation:
<xsl:text>
contenant un saut de ligne en approche si vous utilisez tout ce qui peut reformater votre fichier XSL et le désordre de l'espace.<xsl:text>firstLIne 
 secondline</xsl:text>
<xsl:text>firstLine</xsl:text>
<xsl:text></xsl:text><xsl:text></xsl:text>
<xsl:text>firstLine</xsl:text> 
 <xsl:text>secondLine</xsl:text>
essayé ces formes, mais toutes entraîné la sortie suivante firstLine secondLine veuillez expliquer ce que je fais de mal.Ma méthode privilégiée pour faire cela ressemble à quelque chose comme:
Ensuite, chaque fois que vous souhaitez insérer un saut de ligne (peut-être dans le format csv) vous pouvez afficher quelque chose comme ce qui suit:
J'ai utilisé cette technique lors de la sortie de sql à partir de xml d'entrée. En fait, j'ai tendance à créer des variables pour les virgules, des guillemets et des retours à la ligne.
xml:space="preserve"
à laxsl:text
élément pour une stabilité accrue, mais je serai d'accord que @Florjon la réponse est probablement plus sûr.Inclure l'attribut Method="texte" sur le xsl:output tag et inclure des sauts de ligne dans votre contenu littéral dans le XSL au point approprié. Si vous préférez garder le code source de votre XSL bien rangé utiliser l'entité
où vous voulez insérer une nouvelle ligne.Vous pouvez utiliser:
<xsl:text> </xsl:text>
voir l'exemple
si vous écrivez dans ce fichier par exemple
cette variable va produire une nouvelle ligne infile comme:
À mon humble avis, pas plus d'infos que @Florjon donné est nécessaire. Peut-être certains petits détails sont laissés à comprendre pourquoi il ne pourrait pas travailler pour nous, parfois.
Tout d'abord, la


(hex) ou

(dec) à l'intérieur d'un<xsl:text/>
fonctionnera toujours, mais vous ne pouvez pas le voir.<br/>
fera l'affaire. Sinon, vous allez voir un espace blanc. L'affichage de la source dans le navigateur va vous dire ce qui s'est vraiment passé. Cependant, il y a des cas 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 à la vue de sa structure formaté bien avec les lignes vides et les idents avant de servir pour le navigateur.disable-output-escaping
et où vous n'avez pas. Prenez l'exemple suivant, où j'ai dû créer un fichier xml à partir d'un autre et de déclarer son DTD à partir d'une feuille de style.La première version ne échapper les caractères (par défaut pour xsl:text)
et voici le résultat:
Ok, il fait ce que nous attendons, l'échappement est réalisé de sorte que les caractères que nous avons utilisé sont affichés correctement. La partie XML mise en forme à l'intérieur du nœud racine est gérée par
ident="yes"
. Mais avec un oeil de plus près, nous voyons que le caractère de saut de ligne

a pas échappé, et traduit de l'est, en effectuant un double saut de ligne! Je n'ai pas d'explication sur ce, va être bon à savoir. N'importe qui?La deuxième version n'a pas d'échapper les caractères de sorte qu'ils produisent ce qu'ils sont destinés pour. La modification a été faite:
et voici le résultat:
et ce sera ok. Les deux cr et lf sont correctement rendus.
nl
, pascrlf
(nl=lf
). Ma première tentative a été d'utiliser uniquement cr:
et alors que la sortie xml a été validé par DOM correctement.Je consulte un corrompu xml:
DOM parser méconnu des caractères de contrôle, mais le rendu n'a pas. J'ai passé un certain temps en cognant ma tête avant que j'ai réalisé à quel idiot j'ai été de ne pas voir ce!
Pour l'enregistrement, j'utilise une variable à l'intérieur du corps avec les deux CRLF juste pour être sûr à 100% qu'il fonctionnera partout.
J'ai ajouté le
DOCTYPE
directive que vous voyez ici:Cela me permet d'utiliser
&nl;
au lieu de

pour produire un saut de ligne dans la sortie. À l'instar d'autres solutions, ce qui est généralement placé à l'intérieur d'un<xsl:text>
tag.J'ai trouvé une différence entre littérale des retours à la ligne dans
<xsl:text>
et littérale des retours à la ligne à l'aide de

.Tout littérale des retours à la ligne a bien fonctionné dans mon environnement (à l'aide de Saxon et de Java par défaut du processeur XSLT) mon code a échoué lorsqu'il a été exécuté par un autre groupe de dans une .NET de l'environnement.
Évolution des entités (


) obtenu mon fichier de génération de code s'exécutant de manière cohérente sur Java et en .NET.Aussi, littérale des retours à la ligne sont très vulnérables à l'reformaté par IDEs et peuvent, par inadvertance, se perd lorsque le fichier est maintenu par quelqu'un dans le savoir".
J'ai remarqué de mon expérience que la production d'une nouvelle ligne de à l'INTÉRIEUR de un
<xsl:variable>
clause ne fonctionne pas.J'ai essayé de faire quelque chose comme:
Rien j'ai essayé de mettre dans cette "nouvelle ligne" (le vide
<xsl:text>
nœud) n'a tout simplement pas de travail (y compris la plupart de la plus simple des suggestions dans cette page), pour ne pas mentionner le fait que le HTML ne fonctionne pas là, donc finalement, j'ai dû la couper à 2 variables, de les appeler à l'extérieur de la<xsl:variable>
de la portée et de mettre un simple<br/>
entre eux, j'.e:Ouais, je sais, c'est pas le plus sophistiqué de la solution, mais il fonctionne, juste partager mes
frustrationde l'expérience avec XSLs 😉Vous pouvez essayer,
Il va travailler.
Je seconde carte Gibson méthode, c'était
toujours mon préféré:
Toutefois, j'ai été à l'aide de la tâche Ant <echoxml> pour
créer des feuilles de style et les exécuter sur les fichiers. L'
la tâche n'valeur de l'attribut de modèles, par exemple, ${DSTAMP} ,
mais il est aussi de reformater votre xml, de sorte que certains
cas, l'entité de référence est préférable.
select
au lieu dexsl:text
. Exemple:<xsl:variable name="nl" select="'
'"/>
de Cette façon, vous ne créez pas une inutile RTF (result tree fragment).Je ne pouvais pas simplement utiliser le
<xsl:text>
</xsl:text>
approche, car si je format le fichier XML à l'aide de XSLT l'entité va disparaître. J'ai donc dû utiliser un peu plus ronde au sujet de l'approche à l'aide de variablesil suffit d'ajouter ce tag:
il fonctionne pour moi 😉 .