- PR -

XSLでHTMLのAタグを生成するには?

1
投稿者投稿内容
gate-one
会議室デビュー日: 2001/09/28
投稿数: 5
投稿日時: 2001-09-28 10:48
はじめまして。
XMLを学び始めてから2週間ほどの初心者です。

現在、XML形式で文章を記述して、内容をHTML形式でブラウザで閲覧するというものを製作してます。
いま実現したいのは、XSLを用いてHTML文書の中に<A>タグを埋め込むという処理です。
(※内容的は、スレッド[XSLでHTMLのタグを作成するには?]とは違います。)
例えば、
--------------------
<paragraph>
現在、<link ref="aboutXML.xml">XML</link>形式で文章を記述して、
</paragraph>
--------------------
というXML要素があるとき、
--------------------
<xsl:template match="/">
<xsl:for-each select="paragraph">
<xsl:call-template name="paragraph" />
</xsl:for-each>
</xsl:template>

<xsl:template name="paragraph">
<xsl:for-each select="." />
</xsl:template>
--------------------
というXSLから
--------------------
現在、<a href="aboutXML.xml">XML</a>形式で文章を記述して、
--------------------
というHTMLを得たいのです。

ある本(タイトルは失念しました)には、
<template match="*">
をつかうと、全ての要素にテンプレートが適用されると書いてましたので、
--------------------------
<xsl:template match="*">
<xsl:for-each select="link">
<xsl:element name="a">
<xsl:attribute name="href">
<xsl:value-of select="@ref" />
</xsl:attribute>
<xsl:value-of select="." />
</xsl:element>
</xsl:for-each>
</xsl:template>
--------------------------
というコードを追加してみましたが、リンクは張られません(変化無し)でした。
また、
--------------------------
<paragraph>
現在、<a href="aboutXML.xml"%gt;XML</a>形式で文章を記述して、
</paragraph>
--------------------------
というのも試してみましたが、これは
--------------------------
現在、<a href="aboutXML.xml">XML</a>形式で文章を記述して、
--------------------------
とそのまま表示されるだけでした。(当然ですが)

XMLのテキストの中に要素をはめ込むということ自体が、無理なような気もしますが。

ブラウザは、MS InternetExplorer5.5 + MSXML3SP1 です。

ご教授よろしくお願いします。


[ メッセージ編集済み 編集者: ara 編集日時 2001-09-28 10:55 ]

[ メッセージ編集済み 編集者: ara 編集日時 2001-09-28 10:57 ]

[ メッセージ編集済み 編集者: ara 編集日時 2001-09-28 10:57 ]

[ メッセージ編集済み 編集者: ara 編集日時 2001-09-28 10:58 ]
井上孝司
ぬし
会議室デビュー日: 2001/09/08
投稿数: 668
お住まい・勤務地: 東京都
投稿日時: 2001-09-28 13:46
XML側では

<paragraph>
現在、<a href="aboutXML.xml">XML</a>形式で文章を記述して、
</paragraph>

というようにHTMLのAタグを使って書いておき、スタイルシートでは
paragraph要素に対して

<xsl:template match="paragraph">
<xsl:copy-of select="*|text()"/>
</xsl:template>

というテンプレートを定義するのでは駄目ですか ?
私はいつも、テキスト ノード中にHTMLタグを混ぜたいときはこの方法です。
_________________
www.kojii.net
gate-one
会議室デビュー日: 2001/09/28
投稿数: 5
投稿日時: 2001-09-28 15:26
inopeeさん、ありがとうございます。

期待通りの結果を得られました。

<xsl:copy-of select="*|text()"/>
という指定ができるんですね。
"*|text()"というのは初めて見ました。

まだまだ勉強がたりませんね(笑)

大変参考になりました。
ありがとうございました。
みのる
会議室デビュー日: 2001/09/10
投稿数: 7
投稿日時: 2001-09-28 16:24
こんにちは。
解決したようですが、ちょっと横槍を。

<link ref="aboutXML">のままで変換するなら、
次のように書くのはいかがでしょうか。

===================================================
<xsl:template match="paragraph">
<xsl:apply-templates />
</xsl:template>

<xsl:template match="link">
<a href="{@ref}"><xsl:value-of select="." /></a>
</xsl:template>
=======================================================

属性値テンプレート(XPath式を中括弧{}で囲む)って便利なんで
結構使っています。

※属性値テンプレートについては、XSLTの仕様書に書いてあります。

以上、ご参考まで。

[ メッセージ編集済み 編集者: みのる 編集日時 2001-09-28 16:29 ]
gate-one
会議室デビュー日: 2001/09/28
投稿数: 5
投稿日時: 2001-09-30 20:50
みのるさん、ありがとうございます。

>===================================================
><xsl:template match="paragraph">
><xsl:apply-templates />
></xsl:template>
>
><xsl:template match="link">
><a href="{@ref}"><xsl:value-of select="." /></a>
></xsl:template>
>=======================================================

この方法も、いいですね。
属性値テンプレートですか。XSLTの仕様書をみました。
いろいろなところに応用できそうですね。

とても参考になります。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)