に
<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つの列を含む3つのtr
(行)に数字が表示されることです(最後の行の例外を除く):
<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>
この変換では、位置が3*k +1
(ここでnum
は整数)で表現できないk
要素は、空のボディを持つテンプレートと一致するため、isn処理されません。
ただし、行のセルを形成するすべてのnum
要素を処理します。この目的のために、xslt命令を使用して処理します。
<xsl:apply-templates mode="copy" select=
". | following-sibling::*[not(position() >2)]"/>
つまり、「通常は適用される(モードなしで)選択されたノードテンプレートには適用せず、copy
モードにあるテンプレートを適用します」
したがって、選択したnum
要素を無視しませんが、copy
モードで処理していますで、行のtd
を作成しています。
テンプレートルール:
<xsl:template match="num"/>
位置が3*k +1
として表現できないnum
ノードの文字列値を出力するxslt組み込みテンプレート(デフォルトの処理)をオーバーライドする必要があります。
つまり、これらのノードは両方のテンプレートによって処理されます:
<xsl:template match="num"/>
そして
<xsl:apply-templates mode="copy" select=
". | following-sibling::*[not(position() >2)]"/>
したがって、必要な結果が得られます。
これらのテンプレートがどのように適用されるかを見るために、優れたXSLTデバッガーをステップスルーすることは有益です。
<xsl:apply-templates select="phone" />
<xsl:apply-templates select="phone" mode="accountNumber"/>
<xsl:template match="phone">
<TD>A</TD>
</xsl:template>
<xsl:template match="phone" mode="accountNumber">
<TD>B</TD>
</xsl:template>
ここに簡単な例をリンクしてください: https://msdn.Microsoft.com/en-us/library/ms256045%28v=vs.110%29.aspx