Comment mettre en œuvre le retour de chariot dans XSLT
je veux implémenter le retour de chariot dans xslt. Le problème est que j'ai une varible: Étape 1 = Valeur 1 breaktag Étape 2 = Valeur 2 comme une chaîne de caractères et souhaitez apparaître comme
Étape 1 = Valeur 1
Étape 2 = Valeur 2
dans le format HTML mais je reçois la balise br sur la page.Tout bon moyen de mettre en œuvre un retour de ligne/retour de chariot en xsl serait apprécié
10 réponses
comme alternative à
<xsl:text>
</xsl:text>
vous pouvez utiliser
<xsl:text> </xsl:text> <!-- newline character -->
ou
<xsl:text> </xsl:text> <!-- carriage return character -->
dans le cas où vous ne voulez pas gâcher votre indentation
cela fonctionne pour moi, comme carriage-return + life feed.
<xsl:text>
</xsl:text>
Le " "la chaîne ne fonctionne pas.
utilisez un simple retour de chariot dans un élément xsl: text
<xsl:text>
</xsl:text>
Essayez ceci à la fin de la ligne où vous souhaitez le retour chariot. Il a travaillé pour moi.
<xsl:text><![CDATA[<br />]]></xsl:text>
je cherchais une bonne solution à cela, comme beaucoup préféreraient, sans enchâsser des séquences d'échappement directement dans les expressions, ou avoir des sauts de ligne bizarres à l'intérieur d'une variable. J'ai trouvé un hybride de ces deux approches qui fonctionne en fait, en intégrant un noeud de texte à l'intérieur d'une variable comme celle-ci:
<xsl:variable name="newline"><xsl:text> </xsl:text></xsl:variable>
<xsl:value select="concat(some_element, $newline)" />
un autre effet secondaire agréable de ceci est que vous pouvez passer dans tout newline que vous voulez, que ce soit juste si, CR, ou les deux CRLF.
-- Daniel
le moyen le plus propre que j'ai trouvé est d'insérer !ENTITY
déclarations en haut de la feuille de style pour newline, tab, et autres constructions courantes. Lorsque vous devez insérer un grand nombre d'éléments de formatage dans votre sortie, cela rend la feuille de transformation beaucoup plus propre.
Par exemple:
<?xml version="1.0"?>
<!DOCTYPE xsl:stylesheet [
<!ENTITY nl "<xsl:text>
</xsl:text>">
]>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="step">
&nl;&nl;
<xsl:apply-templates />
</xsl:template>
...
Ici est une approche qui utilise un modèle récursif, qui cherche
dans la chaîne de la base de données et affiche la chaîne avant.
Si y est une sous-chaîne après
reste, puis le modèle s'appelle lui-même jusqu'à ce qu'il ne reste plus rien.
Dans le cas où
n'est pas présent, alors le texte est simplement la sortie.
voici le template call (il suffit de remplacer @Activityextescription par votre champ de base de données):
<xsl:call-template name="MultilineTextOutput">
<xsl:with-param name="text" select="@ActivityExtDescription" />
</xsl:call-template>
et voici le code de la modèle:
<xsl:template name="MultilineTextOutput">
<xsl:param name="text"/>
<xsl:choose>
<xsl:when test="contains($text, ' ')">
<xsl:variable name="text-before-first-break">
<xsl:value-of select="substring-before($text, ' ')" />
</xsl:variable>
<xsl:variable name="text-after-first-break">
<xsl:value-of select="substring-after($text, ' ')" />
</xsl:variable>
<xsl:if test="not($text-before-first-break = '')">
<xsl:value-of select="$text-before-first-break" /><br />
</xsl:if>
<xsl:if test="not($text-after-first-break = '')">
<xsl:call-template name="MultilineTextOutput">
<xsl:with-param name="text" select="$text-after-first-break" />
</xsl:call-template>
</xsl:if>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$text" /><br />
</xsl:otherwise>
</xsl:choose>
Fonctionne comme un charme!!!
je crois que vous pouvez utiliser le code xsl:balise de texte pour cela, comme dans
<xsl:text>
</xsl:text>
Il y a des Chances qu'en mettant la balise de fermeture sur une ligne propre, la nouvelle ligne fasse partie du texte littéral et soit sortie en tant que telle.
j'ai séparé les valeurs par l'Environnement.NewLine et ensuite utilisé une pré-étiquette en html pour émuler l'effet que je cherchais
C'est la seule solution qui a fonctionné pour moi. Sauf que je remplace & # 10; \r\n