- Home ›
- Amazon Web サービス入門 ›
- ページ管理 ›
- HERE
子要素を変換
前のページでルートノードに対する変換ルールを記述しました。今度はルートノード内に含まれる要素に対する変換ルールを記述していきます。
オペレーションとしてItemSearchのリクエストを送信した場合、次のようなXMLデータが取得できます。
<?xml version="1.0" ?> <ItemSearchResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2009-07-01"> ... </ItemSearchResponse>
一番外側のルート要素としては「ItemSearchResponse」要素となっています。今回はこの「ItemSearchResponse」要素に対する変換ルールーを記述します。
ルートノード内の子要素に対する変換ルールの記述方法は次のようになります。
<xsl:template match="/"> ... <xsl:apply-templates select="パターン"/> ... </xsl:template> <xsl:template match="パターン"> <!-- 変換ルールを記述 --> </xsl:template>
まずルートノードの変換ルールを記述する部分に次のような記述を行います。
<xsl:apply-templates select="パターン"/>
パターンはルートノードの時は単に「/」と記述しましたが、要素の場合は対象の要素の名前を使って「aws:要素名」で記述します。
次に対象の子要素をどのように変換するのかをルートノードの場合と同じように次のように記述を行います。
<xsl:template match="パターン"> <!-- 変換ルールを記述 --> </xsl:template>
パターンは先ほどと同じように対象の要素の名前を使って「aws:要素名」で記述します。
今回変換ルールを記述したい子要素は「ItemSearchResponse」要素ですので次のように記述します。
<?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"/> </xsl:template> <xsl:template match="aws:ItemSearchResponse"> <!-- 変換ルールを記述 --> </xsl:template> </xsl:stylesheet>
ルートノードに対する変換ルールの中で<xsl:apply-template>を記述した位置に処理が来たら、「select」に指定したパターンに一致する別のテンプレートルールを探して処理を行います。今回の場合で言えば「aws:ItemSearchResponse」に位置するテンプレートを探して処理した結果を<xsl:apply-template>を記述した位置に埋め込みます。
例として次のようなXSLTスタイルシートを作成してみます。
<?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> <xsl:apply-templates select="aws:ItemSearchResponse"/> </body> </html> </xsl:template> <xsl:template match="aws:ItemSearchResponse"> <p> ItemSearchResponse要素 </p> </xsl:template> </xsl:stylesheet>
流れとしてはルートノードを対象に変換処理を行い、その変換の途中で<xsl:apply-template>が現れた場合には、新しいテンプレートルールを探して変換を行い、その結果を埋め込むと言う処理になります。
サンプル
では実際に試してみます。上記の「ecs3-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/ecs3-1.xsl
結果として取得したXMLデータがXSLTスタイルシートによって変換され次のように出力されます。
取得した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> <p> ItemSearchResponse要素 </p> </body> </html>
これでルートノードに含まれる一番外側の要素を変換することができました。
( Written by Tatsuo Ikura )