要素の値を取得

広告

ここまでは要素そのものを変換するルールを記述していました。ここでは要素の値を取得する方法を確認します。

前のページでは「Item」要素の中身は省略していましたが、実際には次のような要素が含まれています。

<Item>
  <ASIN>...</ASIN>
  <DetailPageURL>...</DetailPageURL>
  <ItemLinks>
    ...
  </ItemLinks>
  <ItemAttributes>
    <Author>柴田 望洋</Author>
    <Manufacturer>ソフトバンククリエイティブ</Manufacturer>
    <ProductGroup>Book</ProductGroup>
    <Title>明解Java 入門編</Title>
  </ItemAttributes>
</Item>

「Item」要素の中に「ItemAttributes」要素が含まれます。この「ItemAttributes」要素の中に「Title」要素や「Author」要素がさらに含まれます。「Title」要素の値には本のタイトルが記述され「Author」要素の値には本の著者が記述されています。ではこの要素の値を取得してみます。

要素の値を取得するには次の書式を使います。

<xsl:value-of select="式"/>

式には値を取得したい要素を指定します。例えばある要素の変換ルールの中に「<xsl:value-of select="aws:Title"/>」と記述すると、この部分が「Title」要素の値に置き換えられます。

では「Item」要素内に含まれる「ItemAttributes/Author」要素と「ItemAttributes/Title」要素のテキストを取得してみます。。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
  xmlns:aws="http://webservices.amazon.com/AWSECommerceService/2009-07-01"
  version="1.0">
<xsl:output method="html" encoding="UTF-8"/>

<xsl:template match="/">

  <xsl:apply-templates select="aws:ItemSearchResponse/aws:Items/aws:Item"/>

</xsl:template>

<xsl:template match="aws:ItemSearchResponse/aws:Items/aws:Item">
  <p>
  [タイトル] <xsl:value-of select="aws:ItemAttributes/aws:Title" />
  [著者] <xsl:value-of select="aws:ItemAttributes/aws:Author" />
  </p>
</xsl:template>

</xsl:stylesheet>

この場合は「Item」要素のテンプレートルールの中で「ItemAttributes/Title」要素と「ItemAttributes/Author」要素の値を取得し「Item」要素を変換しています。

サンプル

では実際に試してみます。まず次のようなXSLTスタイルシートを用意します。

ecs5-1.xsl

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
  xmlns:aws="http://webservices.amazon.com/AWSECommerceService/2009-07-01"
  version="1.0">
<xsl:output method="html" encoding="UTF-8"/>

<xsl:template match="/">
  <html lang="ja">
  <head>
  <title>XSLサンプル</title>
  </head>
  <body>

  <xsl:apply-templates select="aws:ItemSearchResponse/aws:Items/aws:Item"/>

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

<xsl:template match="aws:ItemSearchResponse/aws:Items/aws:Item">
  <p>
  [タイトル] <xsl:value-of select="aws:ItemAttributes/aws:Title" />
  [著者] <xsl:value-of select="aws:ItemAttributes/aws:Author" />
  </p>
</xsl:template>

</xsl:stylesheet>

次のようなリクエストを送信します。(「Style」パラメータにはXSLTスタイルシートを設置したURLを指定して下さい)。

http://xml-jp.amznxslt.com/onca/xml?
Service=AWSECommerceService
&AWSAccessKeyId=[AccessKey]
&Version=2009-07-01
&ResponseGroup=Small
&Operation=ItemSearch
&SearchIndex=Books
&Keywords=Java
&ContentType=text/html
&Style=http://www.example.com/ecs5-1.xsl

結果として取得したXMLデータがXSLTスタイルシートによって変換され次のように出力されます。

要素の値を取得

( Written by Tatsuo Ikura )