を使用してノードのコレクションを反復処理しながら、現在のノードにアクセスする方法を見つけるのに苦労していxsL:for-each
ます。これは私のXMLです:
<events>
<event>
<date>
<year>2012</year>
<month>July</month>
</date>
<description>...</description>
</event>
<!-- more events -->
</events>
私が達成しようとしているのは、次のような HTML 表現です。
<h2>2012</h2>
<dl>
<dt>July</dt>
<dd>One of these for every event with year=2012 and month=July</dd>
<dt>August</dt>
<!-- ... -->
</dl>
<h2>2013</h2>
<!-- ... -->
私は XPath 式を使用してすべての個別の年を取得しyear
、パラメーター$year
およびで呼び出されるテンプレートを呼び出してそれらを反復処理しています$events
。の値を取得するの$year
は簡単ですが、適切なイベントを見つけるのに苦労しています。次の例は機能しません。おそらく、2 番目の述語で述語のテスト対象を.
参照しているためです。event
しかし、そこにアクセスする方法はyear
?
<xsl:template match="events">
<xsl:for-each select="event[not(date/year=preceding-sibling::event/date/year)]/date/year">
<xsl:call-template name="year">
<xsl:with-param name="year" select="." />
<xsl:with-param name="events" select="event[date/year=.]" />
</xsl:call-template>
</xsl:for-each>
</xsl:template>
よろしくお願いします!
PS: XPath と XSLT 1.0 で動作する必要があります。