xslのテンプレートの "mode "の例を教えてください。
質問
で
<xsl:template name="temp_name" mode="mode">
の意味は何ですか?
mode
? 私は多くのリソースを検索しましたが、私はそれのための例を見つけることができませんでした。だから、誰かが例で説明することができますか?
どのように解決するのですか?
テンプレートに名前とモードの両方を与えるのはあまり意味がありません。 .
は
name
属性はテンプレートを完全に識別し、同じ名前で異なるモードを持つ2つのテンプレートを存在させることはできません。
は
mode
属性は、同じノードを異なるモードを使って複数回処理することを可能にします。
.
以下は短い例です。
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="num[position() mod 3 = 1]">
<tr>
<xsl:apply-templates mode="copy" select=
". | following-sibling::*[not(position() >2)]"/>
</tr>
</xsl:template>
<xsl:template match="*" mode="copy">
<td><xsl:value-of select="."/></td>
</xsl:template>
<xsl:template match="num"/>
</xsl:stylesheet>
この変換が次のXML文書に適用された場合 :
<nums>
<num>01</num>
<num>02</num>
<num>03</num>
<num>04</num>
<num>05</num>
<num>06</num>
<num>07</num>
<num>08</num>
<num>09</num>
<num>10</num>
</nums>
その結果、数字が3つで表示されます。
tr
(行) に表示され、それぞれが3つの列を含んでいます。
(で表示されます(最後の行は例外です)。
<tr>
<td>01</td>
<td>02</td>
<td>03</td>
</tr>
<tr>
<td>04</td>
<td>05</td>
<td>06</td>
</tr>
<tr>
<td>07</td>
<td>08</td>
<td>09</td>
</tr>
<tr>
<td>10</td>
</tr>
この変換では、任意の
num
という形で表現できない位置を持つ要素は
3*k +1
(ここで
k
は整数) の場合、空のボディを持つテンプレートにマッチしてしまい、処理されません。
しかし、我々はすべての
num
要素を処理したい。このため、xslt命令を使って処理しています。
<xsl:apply-templates mode="copy" select=
". | following-sibling::*[not(position() >2)]"/>
これは次のような意味です: "選択されたノードに通常適用されるはずのテンプレートを適用せず(no modeの場合)、テンプレートに含まれる
copy
モードであるテンプレートを適用します。
このように、選択された
num
要素を無視するのではなく、それらを
copy
モード
を生成しており
td
の行を作成しています。
テンプレートルールの
<xsl:template match="num"/>
は xslt 組み込みのテンプレート(デフォルトの処理)を上書きするために必要で、そうしないと
num
として表現できない位置のノード
3*k +1
として表現できないノードが出力されます。
つまり、これらのノードは両方のテンプレートで処理され :
<xsl:template match="num"/>
と
<xsl:apply-templates mode="copy" select=
". | following-sibling::*[not(position() >2)]"/>
となり、望みの結果が得られます。
これらのテンプレートがどのように適用されるかを見るために、優れた XSLT デバッガでステップスルーすることは有益でしょう。 .
関連
-
[解決済み] XSLT v2.0 を用いて XML ファイルに schemaLocation を挿入する。
-
[解決済み] XSLTで指定された値を持つ要素を数える
-
[解決済み] XSLで親ノードの属性を取得する
-
[解決済み] ノードに属性を追加する
-
[解決済み] XSLTで文字列がヌルか空かをチェックする
-
[解決済み】XSLTで を挿入する方法
-
[解決済み] XSLTで最後の要素を取得する
-
[解決済み] xsltのtest属性に2つの条件を入れることはできますか?
-
[解決済み] XSLにおける'call-template'と'apply-templates'の違いは何ですか?
-
XSLT ドキュメント内のテンプレートはどのような順序で実行され、ソース XML とバッファリングされた出力のどちらで一致するのでしょうか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] XSLT v2.0 を用いて XML ファイルに schemaLocation を挿入する。
-
[解決済み] XSLT <xsl:if> で文字列を比較するときに "not equals to" を指定するにはどうすればよいですか?
-
[解決済み] XSLTで指定された値を持つ要素を数える
-
[解決済み] XSLT : 1から60までのループ処理
-
[解決済み] XSLTにおける分割
-
[解決済み] XSLTで現在の日付を挿入することはできますか?
-
[解決済み】XSLTで を挿入する方法
-
[解決済み] XSLTで最後の要素を取得する
-
[解決済み] XSLにおける'call-template'と'apply-templates'の違いは何ですか?
-
[解決済み] XSLT 文字列置換