Xslt内にキャリッジリターンを実装したい。問題は、変数が1つあることです。ステップ1 =値1のブレークタグステップ2 =文字列としての値2で、次のように表示したい
ステップ1 =値1
ステップ2 =値2
hTMLフォームではなく、ページにbrタグが表示されています。xslで改行/キャリッジリターンを実装する良い方法はありがたいです
Environment.NewLineで値を分離し、htmlのpreタグを使用して、探していた効果をエミュレートしました
の代替として
<xsl:text>
</xsl:text>
使用できます
<xsl:text> </xsl:text> <!-- newline character -->
または
<xsl:text> </xsl:text> <!-- carriage return character -->
インデントを台無しにしたくない場合
xsl:text要素で単純なキャリッジリターンを使用する
<xsl:text>
</xsl:text>
多くの人が好むように、式にエスケープシーケンスを直接埋め込んだり、変数内に奇妙な改行を入れたりすることなく、これに対するニースのソリューションを探していました。次のような変数内にテキストノードを埋め込むことで、この両方のアプローチのハイブリッドが実際に機能することがわかりました。
<xsl:variable name="newline"><xsl:text> </xsl:text></xsl:variable>
<xsl:value select="concat(some_element, $newline)" />
これのもう1つの良い副作用は、LF、CR、または両方のCRLFであっても、必要な改行を渡すことができることです。
-ダニエル
私が見つけた最もクリーンな方法は、!ENTITY
改行、タブ、およびその他の一般的なテキスト構成のスタイルシートの上部にある宣言。多数のフォーマット要素を出力に挿入する必要がある場合、これにより変換シートがよりきれいに見えます。
例えば:
<?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>
...
キャリッジリターンが必要な行の最後でこれを試してください。それは私のために働いた。
<xsl:text><![CDATA[<br />]]></xsl:text>
これは、データベースからの文字列で
を探し、その前に部分文字列を出力する再帰的なテンプレートを使用するアプローチです。
の後に部分文字列が残っている場合、テンプレートは、何もなくなるまで自分自身を呼び出します。
が存在しない場合、テキストは単に出力されます。
テンプレート呼び出しは次のとおりです(@ActivityExtDescriptionをデータベースフィールドに置き換えるだけです)。
<xsl:call-template name="MultilineTextOutput">
<xsl:with-param name="text" select="@ActivityExtDescription" />
</xsl:call-template>
そして、テンプレート自体のコードは次のとおりです。
<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>
チャームのように動作します!!!
私はあなたがこれにxsl:textタグを使用できると信じています
<xsl:text>
</xsl:text>
終了タグを独自の行に配置することにより、改行がリテラルテキストの一部となり、そのまま出力される可能性があります。