XPath(基礎編)

2001年7月22日(日)更新


■XSLとXPathの関係

たけち: じゃぁ、さっき示したサンプルXMLテキストに次のようなXSLサンプルを適用した場合に、どんな風にXPathが関係しているかを説明するね。

さらら: うんうん。

<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
    <html>
    <head>     <title>たのしいXML: XPathってなぁに?</title>
    <link rel="stylesheet" type="text/css" href="manyo.css" />
    </head>

    <body>
    <p align="center">万葉集: XPath説明用のサンプル</p>

    <xsl:apply-templates />

    <hr width="480" size="5" color="silver" />

    </body>
    </html>
</xsl:template>


<xsl:template match="manyosyu/poem">

  <hr width="480" size="5" color="silver" />
  <p>■歌番号: <xsl:value-of select="@pno" /></p>
  <p>■作者 : <xsl:value-of select="poet" /></p>
  <p>■歌(読み) : <xsl:value-of select="yomi" /></p>

</xsl:template>

</xsl:stylesheet>

たけち: さらら、このXSLでは何をしようとしているかはもう分かるよね。

さらら: うっ、うん。えっ〜と。。。これは、それぞれのpoemについて次のことを表示するようにしてるのね。そうでしょ。

  • poemのpnoっていう属性(の値)を歌の番号として表示
  • poemのpoetを作者名として表示
  • poemのyomiを歌の読みとして表示

たけち: そうだね。じゃあ、これをXPathの指定について見てみるね。まず、次の図を見てくれる?! XSLの中の<xsl:template match="/">match="/"の"/"(スラッシュ)が元のXMLテキストのルートノードをあらわしているんだよ。

さらら: あぁ、そういうことだったのね。・・・

XSLシートでのXPathの指定(1) ルートノード(root)

たけち: それで、その下の<xsl:apply-templates />で、ルートの下のノードにmatchするテンプレートを適用するように指定してあるよね。

さらら: そうだったわね。それで、<xsl:template match="manyosyu/poem">のテンプレートが使われるのよね。そうでしょ。

たけち: そうそう。そこでのXPath指定は、match="manyosyu/poem""manyosyu/poem"なんだけどこれは次の図に説明してあるように、「ルートノードからみて、そのルートノードの下のmanyosyuのその下のpoemと一致するノード」っていう意味なんだよ。

XSLシートでのXPathの指定(2) manyosyu/poem

さらら: そうなの・・・いま見ているXMLサンプルテキストにはmanyosyuの下にはpoemが二つあるから、二つのpoemのノードについてそのテンプレートが適用されるのね。

たけち: そうだね。じゃあ、このテンプレートの中を見ていこうね。三つの xsl:value-of があるね。

  • <xsl:value-of select="@pno" />
  • <xsl:value-of select="poet" />
  • <xsl:value-of select="yomi" />

さらら: えぇ。最初の@pno@(アットマーク) は「属性」のことだったわね。

たけち: そうそう。前にサンプルでやったのを覚えているよね。次の図を見て。

XSLシートでのXPathの指定(3) @pno


■カレントノード

さらら: うんうん。。。。あっ、あれ? よく見るとさっきのmanyosyu/poemの説明だと「ルートノードから」の指定だったけど、この図だと・・・・・

たけち: あっ、そうそう。ひとつ説明を忘れていたよ。このテンプレートは、poem が見つかったときに適用されるって言ったよね。

さらら: うん。「ルートノードの下のmanyosyuの下のpoem」よね。

たけち: そうだね。で、そのpoemが見つかったときには、カレントノードが「ルートノード」から「poemノード」に移るんだ。

さらら: カレントノード??

たけち: XSLTを処理するソフトがいま見ているノードのことで、XPathではこのカレントノードから見てどのノードかを指定するんだよね。

さらら: へぇ、そうなんだぁ。。。ということは、このテンプレートを処理しているときにはカレントノードはどっちかのpoemになっているっていうことなのね。

たけち: そうなんだ、だからあと二つの poetyomiもそれぞれカレントノードになっているpoemからの指定になっているんだ。

さらら: わかったわ。

たけち: poetの場合についての図を次に載せておくね。yomiはまったく同様だから図は省略するね。

XSLシートでのXPathの指定(4) poet

たけち: それから、念のために今回使ったサンプルはIEではどんな風に表示されるかを次に載せておくね。いつものようにね。

さらら: うん、ありがと。

万葉集第1巻抜粋のXMLファイル xpathsample.xml(上記説明のXSL適用)

こんな風に表示されます・・・

さらら: これまでのサンプルでなんとなく分かっていたつもりのことがよ〜くわかった気がするわ。なんだかうれしい!!

たけち: XPathについてはもう少し説明したいから、続けていいかな?!

さらら: は〜い!! (^ ^*

→次はXPath ロケーションパスです (^ ^;