xsl:templateやxsl:apply-templatesで囲まれた中に生成する内容を定義します。
ここでは、AmazonのAsinSearchと呼ばれる商品個別の検索を例にします。
AsinSearchで得られるデータの一部を次に示します。
<?xml version="1.0" encoding="UTF-8" ?> <ItemLookupResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2005-09-15"> <Items> <Item> <ItemAttributes> <Artist>Bryan Adams</Artist> <Binding>CD</Binding> <Creator Role="アーティスト">Bryan Adams</Creator> <Title>Reckless</Title> </ItemAttributes> </Item> </Items> </ItemLookupResponse>
このXMLデータをHTMLへ変換することを考えます。
xsl:template match="/"に囲まれた部分に出力するHTMLを記述します。
match属性の/はXMLのルートを示し、ルート要素と一致したらこのタグで囲まれた
部分を生成します。
上記XMLの例で、CDのタイトルをHTMLで出力するようにXSLTを作成してみます。
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:aws="http://webservices.amazon.com/AWSECommerceService/2005-09-15"> <xsl:template match="/"> <html lang="ja"> <head> <title> <xsl:value-of select="aws:ItemLookupResponse/aws:Items/aws:Item/aws:ItemAttributes/aws:Title" /> </title> </head> <body> <p> <xsl:value-of select="aws:ItemLookupResponse/aws:Items/aws:Item/aws:ItemAttributes/aws:Title" /> </p> </body> </html> </xsl:template> </xsl:stylesheet>
XMLの最上位と一致したらHTMLを生成します。xsl:value-ofでTitleの値生成し
HTMLのテキスト部分にするようにしています。
一致したらということなので、次のようなXSLTを作成してみました。
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:aws="http://webservices.amazon.com/AWSECommerceService/2005-09-15"> <xsl:template match="aws:ItemAttributes"> <html lang="ja"> <head> <title> <xsl:value-of select="aws:Title" /> </title> </head> <body> <p> <xsl:value-of select="aws:Title" /> </p> </body> </html> </xsl:template> </xsl:stylesheet>
ItemAttributesが見つかったら生成されると思ったのですが、結果は不必要な部分も
出力されてしまいます。
これは、デフォルトテンプレートと呼ばれるもので、mutchしなかったノードは最終的に
デフォルトテンプレートが適用されその結果出力されたようなのです。
要素ノードおよびルートノードに合ったテンプレートがない場合、デフォルトテンプレートが
使用されます。
Copyright 1997-2010 BBB All rights reserved.