2001年7月22日(日)更新 |
■XSLとXPathの関係
たけち: じゃぁ、さっき示したサンプルXMLテキストに次のようなXSLサンプルを適用した場合に、どんな風にXPathが関係しているかを説明するね。 さらら: うんうん。 |
<?xml version="1.0" encoding="Shift_JIS"?> |
たけち: さらら、このXSLでは何をしようとしているかはもう分かるよね。 さらら: うっ、うん。えっ〜と。。。これは、それぞれのpoemについて次のことを表示するようにしてるのね。そうでしょ。
たけち: そうだね。じゃあ、これをXPathの指定について見てみるね。まず、次の図を見てくれる?! XSLの中の<xsl:template match="/">のmatch="/"の"/"(スラッシュ)が元のXMLテキストのルートノードをあらわしているんだよ。 さらら: あぁ、そういうことだったのね。・・・ |
たけち: それで、その下の<xsl:apply-templates />で、ルートの下のノードにmatchするテンプレートを適用するように指定してあるよね。 さらら: そうだったわね。それで、<xsl:template match="manyosyu/poem">のテンプレートが使われるのよね。そうでしょ。 たけち: そうそう。そこでのXPath指定は、match="manyosyu/poem"の"manyosyu/poem"なんだけどこれは次の図に説明してあるように、「ルートノードからみて、そのルートノードの下のmanyosyuのその下のpoemと一致するノード」っていう意味なんだよ。 |
さらら: そうなの・・・いま見ているXMLサンプルテキストにはmanyosyuの下にはpoemが二つあるから、二つのpoemのノードについてそのテンプレートが適用されるのね。 たけち: そうだね。じゃあ、このテンプレートの中を見ていこうね。三つの xsl:value-of があるね。
さらら: えぇ。最初の@pnoの@(アットマーク) は「属性」のことだったわね。 たけち: そうそう。前にサンプルでやったのを覚えているよね。次の図を見て。 |
■カレントノード
さらら: うんうん。。。。あっ、あれ? よく見るとさっきのmanyosyu/poemの説明だと「ルートノードから」の指定だったけど、この図だと・・・・・ たけち: あっ、そうそう。ひとつ説明を忘れていたよ。このテンプレートは、poem が見つかったときに適用されるって言ったよね。 さらら: うん。「ルートノードの下のmanyosyuの下のpoem」よね。 たけち: そうだね。で、そのpoemが見つかったときには、カレントノードが「ルートノード」から「poemノード」に移るんだ。 さらら: カレントノード?? たけち: XSLTを処理するソフトがいま見ているノードのことで、XPathではこのカレントノードから見てどのノードかを指定するんだよね。 さらら: へぇ、そうなんだぁ。。。ということは、このテンプレートを処理しているときにはカレントノードはどっちかのpoemになっているっていうことなのね。 |
たけち: そうなんだ、だからあと二つの poetとyomiもそれぞれカレントノードになっているpoemからの指定になっているんだ。 さらら: わかったわ。 たけち: poetの場合についての図を次に載せておくね。yomiはまったく同様だから図は省略するね。 |
たけち: それから、念のために今回使ったサンプルはIEではどんな風に表示されるかを次に載せておくね。いつものようにね。 さらら: うん、ありがと。 |
万葉集第1巻抜粋のXMLファイル xpathsample.xml(上記説明のXSL適用)
さらら: これまでのサンプルでなんとなく分かっていたつもりのことがよ〜くわかった気がするわ。なんだかうれしい!! たけち: XPathについてはもう少し説明したいから、続けていいかな?! さらら: は〜い!! (^ ^* →次はXPath ロケーションパスです (^ ^; |