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é

21
demandé sur chugh97 2009-06-19 13:18:39

10 réponses

comme alternative à

<xsl:text>
</xsl:text>

vous pouvez utiliser

<xsl:text>&#10;</xsl:text> <!-- newline character -->

ou

<xsl:text>&#13;</xsl:text> <!-- carriage return character -->

dans le cas où vous ne voulez pas gâcher votre indentation

42
répondu Steef 2009-06-19 09:28:00

cela fonctionne pour moi, comme carriage-return + life feed.

<xsl:text>&#xD;&#xA;</xsl:text>

Le " "la chaîne ne fonctionne pas.

7
répondu Adam Tauno Williams 2014-05-13 13:37:17

utilisez un simple retour de chariot dans un élément xsl: text

<xsl:text>
</xsl:text>
3
répondu Pierre 2009-06-19 09:21:58

Essayez ceci à la fin de la ligne où vous souhaitez le retour chariot. Il a travaillé pour moi.

<xsl:text><![CDATA[<br />]]></xsl:text>
3
répondu Ken 2010-11-24 13:51:43

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>&#10;</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

3
répondu Daniel 2014-05-27 17:39:48

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>

...

2
répondu Como 2014-07-26 15:20:10

Ici est une approche qui utilise un modèle récursif, qui cherche &#10; 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 &#10; reste, puis le modèle s'appelle lui-même jusqu'à ce qu'il ne reste plus rien. Dans le cas où &#10; 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, '&#10;')">
        <xsl:variable name="text-before-first-break">
            <xsl:value-of select="substring-before($text, '&#10;')" />
        </xsl:variable>
        <xsl:variable name="text-after-first-break">
            <xsl:value-of select="substring-after($text, '&#10;')" />
        </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!!!

1
répondu Jens Hupkau 2013-07-26 16:58:51

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.

0
répondu Frerich Raabe 2009-06-19 09:23:19

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

0
répondu chugh97 2009-06-19 13:05:05

C'est la seule solution qui a fonctionné pour moi. Sauf que je remplace & # 10; \r\n

0
répondu Philip Radvan 2015-01-07 16:24:14