listitem中から記事のIDを取得するには

「まったく何も分からない・・・」そんなユーザーさんの為のフォーラムです。どんなご質問でもお気軽にどうぞ。
返信
fword
記事: 4
登録日時: 2006年6月19日(月) 15:23

listitem中から記事のIDを取得するには

投稿記事 by fword » 2006年7月20日(木) 16:43

お世話になります。現在制作中の案件で問題出て悩んでおります。
表題の件ですが

コード: 全て選択

<xsl:for-each select="imagelist/listitem">
 <xsl:if test="position()=1">
  <a href="kiji.php?eid={@id}"><img src="{image}"  /></a>
 </xsl:if>
</xsl:for-each>
上記のようにエントリの中にリストで何枚か画像をアップし、最初の一枚目だけを表示して、その画像にエントリへの個別リンクを貼りたいのですが、@idで取得されるのは、リスト自体のIDである「1」になってしまい、エントリのIDが取得できません。
「@href」も試しましたが、同様の結果になりました。
javascriptのようにparentというような指定で、リスト側からエントリのIDを引っ張ることはできないのでしょうか?
IDやlistでフォーラム内を検索しましたが、見つかりませんでしたのでご質問させていただきます。
どうぞ、よろしくお願いします。

webmaster
Site Admin
記事: 1451
登録日時: 2004年12月10日(金) 10:09

Re: listitem中から記事のIDを取得するには

投稿記事 by webmaster » 2006年7月20日(木) 23:28

 webmasterです。fwordさん、ご質問ありがとうございます。

 これは、XMLによほど慣れていないと躓くと思います。マニュアルなどでも説明
しておらず、すいません。

 結論から書くと、おそらく{../../@id}で取れるのではないかと思います。

 ここから先は不要でしたら無視して頂いてOKですが、簡単に説明しますと、
CMSDからXSLTへ渡される加工前のエントリデータは、次のようになっています。
(簡略してあります)

コード: 全て選択

<entrylist>
<entry id="00005">
 <imagelist>
  <listitem id="1"><image>(画像ファイルのパス)</image></listitem>
  <listitem id="2"><image>(画像ファイルのパス)</image></listitem>
  <listitem id="3"><image>(画像ファイルのパス)</image></listitem>
 </imagelist>
</entry>
<entry id="00008">
 <imagelist>
  <listitem id="1"><image>(画像ファイルのパス)</image></listitem>
  <listitem id="2"><image>(画像ファイルのパス)</image></listitem>
  <listitem id="3"><image>(画像ファイルのパス)</image></listitem>
 </imagelist>
</entry>
 :
</entrylist>
 「<xsl:for-each select="entry">」の内部では通常、XSLの加工対象となる
「カーソル(現在位置)」は、entryタグにある為、{@id}と書くとentryタグのid属性
を取得してくれるのですが、今回の場合、さらに<xsl:for-each select="imagelist/listitem">
によってカーソル(現在位置)が listitemタグに移動しています。
 よって、{@id}と書くとlistitemのid属性が取得されてしまいます。

 このxsl:for-each内でentryのid属性を取得する為に、相対パス指定によって
「..」を2回使い、二つ上の階層(entryタグ)まで戻り、そこから@idを参照します。
 なので、「{../../@id}」という書き方になります。
 ルートからの相対パス指定で、「{/entry/@id}」でも取れる場合もあります。

 以上、解決しなかった場合、大変お手数ですが再度ご質問頂ければ幸いです。

fword
記事: 4
登録日時: 2006年6月19日(月) 15:23

ありがとうございます

投稿記事 by fword » 2006年7月21日(金) 09:49

{../../@id}で取れたんですね。
実は通常のHTMLを作る感覚で、1階層上に行けばいいのだから{../@id}というのは試してみたのですが、何も取得できなかったので「そんな簡単なわけないか」とあきらめておりました。
意外にも方法自体はあっていたので驚きましたが、2階層下にあったんですね。
迅速なご回答をいただき、ありがとうございます。
開発頑張ってください。

webmaster
Site Admin
記事: 1451
登録日時: 2004年12月10日(金) 10:09

Re: ありがとうございます

投稿記事 by webmaster » 2006年7月21日(金) 10:23

 fwordさん、既に近い方法をお試し頂いていたとのことで、蛇足な説明、失礼
致しました。m(__;)m

 もしうまくいかなかった場合、またご質問頂ければ幸いです。

返信