XSLT を使用して、子ノード属性に基づいて param 値を抽出する必要がある次の XML があります。この場合、生徒が参加している活動のリストを抽出します。
XML
<students>
<student id="1000020001"/>
<student id="1000020002"/>
</students>
<activities>
<activity name="yoga beginners" start="2016-10-12" end="2016-12-17">
<members>
<member id="1000020001"/>
</members>
</activity>
<activity name="yoga intermediate" start="2017-10-12" end="2017-12-17">
<members>
<member id="1000020001"/>
<member id="1000020002"/>
</members>
</activity>
</activities>
生徒が参加しているアクティビティを表示する XSLT を作成したいと考えています。
XSLT 生徒ごとに:
<xsl:for-each select="/activities/activity">
<b>Activity:</b>:
<xsl:call-template name="extractActivities">
<xsl:with-param name="student-id" select="@id"/>
</xsl:call-template>
</xsl:for-each>
<xsl:template name="extractActivities">
<xsl:param name="student-id"/>
<xsl:if test="$student-id = /activities/activity/members/member/@id">
<xsl:value-of select="@name"/>
</xsl:if>
</xsl:template>
次の2つの問題があります。
- 最初の XSLT は、各ノードに対してループを実行しているため、「Activity:」を 2 回表示します。
- アクティビティ名が表示されない