2016-12-22 12 views
2

このサイトでは新しい。私のコードがなぜ機能していないのかを知るのを助けることができます。私は、このサイトの件名に関する他の投稿を使用してこれを閉じましたが、私のエラーは表示されません。XSLT条件付きカウント

XSLT:

<!-- Keyset based on the Subject (Part Number) --> 
<xsl:key name="key_PartNumber" match="Subject" use="."/> 

<xsl:template match="/"> 
    <BOM> 
     <!-- Do for each unique Subject (Part Number) --> 
     <xsl:for-each select="//Markup/Subject[generate-id() = generate-id(key('key_PartNumber', .)[1])]"> 
     <Part> 
      <xsl:attribute name="Part_Number"> 
       <xsl:value-of select="."/> 
      </xsl:attribute> 
      <xsl:attribute name="Count"> 
       <xsl:value-of select="count(//Markup[Subject=.])"/> 
      </xsl:attribute> 
      </Part> 
     </xsl:for-each> 
    </BOM> 
</xsl:template> 

</xsl:stylesheet> 

私は私の変換を実行すると、私はいつも以下は0 のカウントを取得するには、サンプルXMLファイルの両方のスクリーンショットだけでなく、XPathクエリの結果でありますそれは正しい結果を得ています。

答えて

1

[Subject=.][Subject=current()]に置き換えます。コンテキスト項目は述語内で変更されます。

+0

これが機能しました。どうもありがとうございました! –

2

としては、既に説明した、あなたのアプローチに伴う問題は、述語内で使用される略語.が述語を先行ノードにではなく、現在のコンテキスト・ノードを指すことがある。http://www.w3.org/TR/xpath/#predicates

しかし、ここで正しい解であります

<xsl:value-of select="count(key('key_PartNumber', .))"/> 
+0

これは機能しました。特にリンクや説明をありがとうございました。将来の悲しみは私がこの概念を理解していないだろう! –