since 2004/05

第9回 思い出したようにxsl:attribute

今回は管理人が今悩んでることをちょっと書こうかと。
いや、もちろんXML関係ですが。

その悩みの種となってるのが、ほかならぬHTMLです。

実は、以前から悩んでたことなんですけどね。

それは「XMLの中にHTMLを埋め込めないのか?」ってことです。

XMLにHTMLを埋め込もうとすること自体間違ってるような気もするんですが
XMLでHPを作ろうとすると、どうしても埋め込みたい時があったりするわけです。

例えばこんな感じ。

<items> <item> <a herf="http://www・・・・・"><img src="http://www/・・・・・" />商品1</a> <price>1,000円</price> </item> <item> <a herf="http://www・・・・・"><img src="http://www/・・・・・" />商品2</a> <price>1,100円</price> </item> <item> <a herf="http://www・・・・・"><img src="http://www/・・・・・" />商品3</a> <price>1,200円</price> </item> </items>

なんでaタグとimgタグかって言うと、今使ってる楽天のアフェリエイトの商品リンクがこうなってるんです。 で、できればそれをそのまま使えればなーと。 だけども、これをそのまま使えるわけもなく。 大体、aもimgもタグなわけで、XMLを変換する時に普通に変換対象となります。 HTMLなんてお構いなしですよ。 それに、どう指定していいかもわかんない・・・ それじゃ、どうしたかと言うと。 a,imgタグのテンプレートを作りました^^; 結構調べてみたけど、見つけられなくて。 だったら、普通にタグとして扱って、a,imgタグのテンプレート作っちゃおうと。 完全に力技です。 で、出来たのが下のテンプレートです。

<xsl:template match="a"> <a> <xsl:attribute name="href"> <xsl:value-of select="@href" /> </xsl:attribute> <xsl:attribute name="target"> <xsl:value-of select="@target" /> </xsl:attribute> <xsl:apply-templates /> </a> </xsl:template> <xsl:template match="img"> <img> <xsl:attribute name="src"> <xsl:value-of select="@url" /> </xsl:attribute> <xsl:attribute name="src"> <xsl:value-of select="@src" /> </xsl:attribute> <xsl:attribute name="alt"> <xsl:value-of select="@alt" /> </xsl:attribute> <xsl:attribute name="border"> <xsl:value-of select="@border" /> </xsl:attribute> </img> </xsl:template>

一応良く使うプロパティは対応したものです。 ・・・って、このxsl:attributeって説明してない・・・ですね。 えーとaタグの方で説明すると。 まず最初の「<a>」で、HTMLのaタグ作りますーって言う意味になります。 つまりHTMLで言うと、「<a」の部分になります。 その次に出てくるのが「<xsl:attribute name="href">」です。 これはaタグに対するプロパティを設定するもので、「name」で指定しているのが そのプロパティ名となります。ここではhrefですね。 で、その後にプロパティに設定する値やアドレス等を指定します。 設定方法は今までどおりの「xsl:value-of」で行います。 もしXMLのデータでなく、直接設定する場合は、そのまま設定値をここに書きます。 ここではhrefに対しての設定なので、アドレスになります。 そして最後に「</xsl:attribute>」で閉めます。 複数プロパティを設定する場合は、これを繰り返すだけです。 そして一番最後にaタグの終りを示す「</a>」を書いて終了です。 うーんちょっと一息じゃ無くなったなぁ。 今回は説明無しのつもりだったんだが・・・ (実はここのタイトル「ちょっと一息・・・」で書いてたんだけど、上のxsl:attributeの 説明してなかったのをすっかり忘れていた為、急遽説明足して、タイトルも変えました^^; ・・・えぇ計画性なんてまったくありませんヨ) まぁ結局自分で作っちゃたんだけど。 もし他にいい方法があれば誰か教えてくださいマジデ。 次回は・・・実際にXMLでHPを作るにあたって、若干気をつけることがあるので、その辺を 説明します。

kajikaji
kajikaji