okakensantaさん、ご質問ありがとうございます。
非常に良い質問かと思います。この辺は、XMLの本格的な理解が必要になって
くる為、敢えてマニュアルでは説明をしていません。
XSLTでは、扱うデータ対象を表す方法として「XPath」という表現を使います。
例えば、
コード: 全て選択
<entry id="00001">
<data1>データ</data1>
</entry>
というXMLデータがあった際には、data1を表すXPath表現は「/entry/data1」
となります。
entryのid属性は、「/entry/@id」と表現されます。属性の場合は@が付くのが
ポイントです。
この「/」は、URLやフォルダ階層を表すあの「/」とほぼ同じ意味になります。
ルートから順に、entryの下のdata1、という感じです。
また、URLやフォルダ階層と同じように、「現在位置」というものを持って
いて、例えば
コード: 全て選択
<xsl:for-each select="entry">
<xsl:value-of select="data1" />
</xsl:for-each>
のように、for-eachの中に入った場合には、for-eachでselectした対象の
データが「現在位置」となります。
なのでこの場合には、「data1」と書けば自動的に「/entry/data1」を表す
ことになります。
同様に、entryのid属性には、次のようにアクセスできます。
コード: 全て選択
<xsl:for-each select="entry">
<xsl:value-of select="@id" />
</xsl:for-each>
for-eachは現在位置を移動するのだ、と覚えておいて下さい。
ここで、entrylistの場合、デザイン定義には次のようなデータが送られます。
(かなり簡略化しています。実際にはもっと様々なデータが入っています)
コード: 全て選択
<entrylist>
<navi position="1">
<page id="1" />
<page id="2" />
<page id="3" />
</navi>
<entry id="00001">
<data1>データ1</data1>
</entry>
<entry id="00002">
<data1>データ2</data1>
</entry>
</entrylist>
entrylistの直下にまず、ナビゲーション情報としてnavi要素があり、その中に
全ページ番号情報が入っています。
「現在のページ番号」であるposition属性を持っているのはnavi要素で、
各ページ番号はその下のpage要素のid属性が保持しています。
ここで、
コード: 全て選択
<xsl:for-each select="navi">
<xsl:for-each select="page">
<xsl:if test="../@positon=@id">
<strong><xsl:value-of select="@id" /></strong>
</xsl:for-each>
</xsl:for-each>
が何を表すかはもうお分かりかと思います。
navi/@positionにアクセスしたいのですが、その下のpage要素に現在位置が
移ってしまっている為、@positionと書くとpage/@positionを見に行って
しまうのです(もちろんそのようなデータは存在しません)。
そこで、「../」という「一つ上の階層」を見に行く表現を使って、naviの
要素へアクセスしています。
かなりはしょって説明させて頂きましたが、ご不明な点はまたご質問頂ければ
幸いです。
また、実際のところこの辺はかなり分かり難い用語やデータ名になってしまって
いると思います。その点、お詫び申し上げます。m(__)m