2015-01-08 9 views
5

以下のコードでは、(コードの最後にある)要素の章にすべてのテンプレートを適用していますが、どのように適用することができますかすべてのテンプレートは、この要素には唯一のものを除きます。この場合、前の行で既に選択しているので、要素タイトルです。これはhtmlファイルに繰り返し表示されます。誰か?speeic oneを除くすべてのテンプレートにテンプレートを適用する方法

<xsl:template match="chapter"> 
    <h3> 
     <a name="{@id}"><xsl:value-of select="title"/></a> 
    </h3> 
    <xsl:apply-templates/> 
</xsl:template> 

出力:

<h3>Title</h3> 
Title<br> 
Text. 

答えて

11

無地<xsl:apply-templates/>は、すなわち、すべての子ノード<xsl:apply-templates select="node()" />と等価です。 XPath 2.0 except operatorを使用すると、特定のノードを除外できます。

<xsl:apply-templates select="node() except title" /> 

これは名前titleを持つ要素であるものを除き、すべての子ノードを選択することになります。子の要素(テキストノードなどではない)だけに興味がある場合は、代わりに* except titleを使用できます。

exceptオペレータは基本的にセット差を実装しています。右の単純な要素名に限らず、ノードのシーケンスを返す任意の式を使用できます。

node() except (title | div[@class = 'heading']) 

X except YでもXとしないY

によって選択された配列によって選択された配列内にあるすべてのノードを選択します
関連する問題