- 締切済み
お願いします。
教えてください。 <ALL> <ITEM> <ITEMS>一</ITEMS> <ITEMS2>1</ITEMS2> </ITEM> <ITEM> <ITEMS>二</ITEMS> <ITEMS2>2</ITEMS2> </ITEM> </ALL> というようなXMLに <xsl:for-each select="ALL/ITEM"> <xsl:value-of select="ITEMS" /><BR /> </xsl:for-each> という処理をかけると、一<BR>二<BR>のように表示されますが、常に一番最初のITEMS(この場合、一)が欲しいときはどうすればいいのでしょうか。 <xsl:value-of select="ITEMS[1]" />や <xsl:value-of select="ITEMS[position()=1]" /> 等を試してみましたが、現在の値が抽出されてしまい失敗しました。参考ページでもいいので教えてください。お願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- jo-ji
- ベストアンサー率72% (26/36)
1つ目のITEMを選択しておいて、その中のITEMSの1番目を出力したい場合、 <xsl:for-each select="ALL/ITEM[1]"> <xsl:value-of select="ITEMS" /><BR /> </xsl:for-each> とすれば良いと思います。 すべてのITEMSの中で1番目を選択すると考えるなら、 xsl:for-eachを使わずに <xsl:value-of select=".//ITEMS[1]"/> または <xsl:value-of select=".//ITEMS"/> とすることもできます。 親がITEM要素でなければならないというような条件を付けることもできます。 ちなみに、xsl:value-ofは、属性selectで指定されたものを stringに変換して出力するもので、 node-setからstringへの変換は、1つ目のノードのstring-valueになる (XPathの仕様書を参照して下さい)ので、 以下の3つは同等です。 <xsl:value-of select="ITEMS" /> <xsl:value-of select="ITEMS[1]" /> <xsl:value-of select="ITEMS[position()=1]" />