- - PR -
XSLでHTMLのAタグを生成するには?
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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-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 |
|
投稿日時: 2001-09-28 15:26
inopeeさん、ありがとうございます。
期待通りの結果を得られました。 <xsl:copy-of select="*|text()"/> という指定ができるんですね。 "*|text()"というのは初めて見ました。 まだまだ勉強がたりませんね(笑) 大変参考になりました。 ありがとうございました。 |
|
投稿日時: 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 ] |
|
投稿日時: 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