ルートノードを変換

広告

ではここからXMLデータをHTMLに変換するルールを記述していきます。まずはXMLデータ全体を変換するルールを記述します。

XMLデータに含まれるデータの中で、指定のノード以下の変換規則を記述するには次の書式を使います。

<xsl:template match="パターン">
  <!-- 変換ルールを記述 -->
</xsl:template>

このようにパターンに一致する変換ルールを記述したものをテンプレートルールと呼びます。

パターンには変換対象の要素名を記述します。今回はXMLデータ全体を表すルートノードを対象としますが、ルートノードのパターンは「/」で表されますので次のように記述します。

<?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:template>

</xsl:stylesheet>

このルールによってまずXMLデータ全体が次のように変換されます。

<xsl:template match="/">
  <!-- XMLデータ全体がここに記述した内容に変換される -->
</xsl:template>

例として次のようなXSLTスタイルシートを作成してみます。

ecs2-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>

  <p>サンプル</p>

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

</xsl:stylesheet>

今回の場合はXMLデータのルートノードを<html>から</htm>までの部分に変換するようにルールを記述しています。XMLデータの内容を何も使っていませんのでXMLデータがどんなデータであっても同じように変換されます。

サンプル

では実際に試してみます。上記の「ecs2-1.xsl」をXSLTスタイルシートとして設置し、その後で次のようなリクエストを送信します。(「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/ecs2-1.xsl

リクエストに対して通常はXMLデータが返されますが、今回の場合はStyleプロパティによって指定されたXSLTスタイルシートによってルートノード内の全データが変換されたHTMLデータとして返されます。

ルートノードを変換

取得したHTMLデータは次のようになっています。

<html xmlns:aws="http://webservices.amazon.com/AWSECommerceService/2009-07-01" lang="ja">
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <title>XSLサンプル</title>
   </head>
   <body>
      <p>サンプル</p>
   </body>

</html>

今回のようなXSLTスタイルシートでは、どのようなリクエストを送信してもまったく同じHTMLデータに変換されます。次のページ以降ではリクエストに対して返された値の中の必要なデータを取り出してHTMLデータの中に追加する方法を確認します。

( Written by Tatsuo Ikura )