XPath(基礎編): ロケーションパスの述部

2001年7月29日(日)更新


■XPath: ロケーションパスのノードテスト

さらら: ねぇ、述部の前に、ノードテストを説明して。

たけち: あっ、ノードテストは、だいたいはエレメント(要素)名を書くからいいと思っていたけど。。。じゃあ、使いそうなものに簡単にリストしておくね。

さらら: お願い。

ノードテストの主なもの

エレメント(要素)名
指定した名前のエレメント(要素)ノードを選びます
*
*(アスタリスク)で、すべてのエレメント(要素)ノードを選びます
node()
すべての要素/コメント/テキスト/属性等のノードを選びます
text()
エレメント(要素)ノードの文字データ(内容)を選びます。

たけち: どう? 指定した名前のエレメント(要素)ノードを選ぶことが多いんだよね。

さらら: そっ、そうね。。。。 (^ ^; じゃあ、早速、述部を見てみましょうね。

たけち: あっ、そっ、そうだね。。。。

テキストノードの指定

たけち: 次に述部の主なものを見てみようね。position()が最もよく使われるんだ。


■XPath: ロケーションパスの述部

述部の主なもの

[position()=n]
position()はコンテキストノードの順番(何番目のノードか)を教えてくれます。[position() = 1]というように指定します。この例は、1番目のノード、を選びます。
[@属性名="属性の指定値"]
コンテキストノードの属性名で指定した「属性」の値が"属性の指定値"に一致しているノードを選びます。

さらら: position()などはこれまでのXSLサンプルで見たことあるわ。

たけち: そうだね。だから、あまり説明の必要は無いよね。

さらら: でも、少し忘れかけているからサンプルでもう一度見てみたいわ。いいでしょ。

たけち: そっかぁ。じゃあ、述部のごく簡単なサンプルを載せておこうね。使うXMLドキュメントは前回と同じだよ。サンプルでの述部指定について、いつものように図にしておくね。


■XPath: ロケーションパスの述部の指定サンプル

述部の指定サンプル

さらら: last()は前回のサンプルで見たわね。

たけち: そうそう。last()はコンテキストノードの最後のノードを選ぶんだったね。。

さらら: うん。

たけち: これらの指定を含んだXSLサンプルのリストを次に載せるね。

XPathサンプル用xslスタイルシート

<?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 select="//body" />

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

<xsl:template match="//body">

<xsl:if test="parent::volume[@no='2']">
    <p>■カレントノードは、volume=<xsl:value-of select="../@no" />manyosyu/volume/body です。</p>

  <div>
    <p> - <xsl:value-of select="child::poem[position()=1]" />の内容は次のとおりです。</p>
    <p><xsl:value-of select="child::poem[position()=1]" /></p>

    <p> - <xsl:value-of select="child::poem[last()]" />の内容は次のとおりです。</p>
    <p><xsl:value-of select="child::poem[last()]" /></p>

    <p> - <xsl:value-of select="child::poem[@pno='0092']" />の内容は次のとおりです。</p>
    <p><xsl:value-of select="child::poem[@pno='0092']" /></p>
    </div>

</xsl:if>
</xsl:template>

</xsl:stylesheet>

たけち: じゃあ、このXMLテキストを"position.xml"というファイル、XSLスタイルシートを"position.xsl"というファイルにして、実際にどうなるか見てみようね。次のテキストをクリックしてみて。

XPathサンプルの表示結果

さらら: これで、XPathの一通りを勉強したのかしら。

たけち: そうそう。でも、細かいところについては、少し説明が不足しているから随時追加していくね。

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

→次回はルートノードです。 (^ ^;