- - PR -
for-eachでのテーブル構築
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-10-27 01:45
初心者的な質問ですみません。
<?xml version="1.0" encoding="Shift_JIS" ?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="html" encoding="Shift_JIS" /> <xsl:template match="/"> <html> <head> <title><xsl:value-of select="books/@title" /></title> <link rel="stylesheet" type="text/css" href="books.css" /> </head> <h1><xsl:value-of select="books/@title" /></h1> <table border="1"> <tr> <th>a</th> <th>b</th> <th>c</th> <th>d</th> <th>e</th> <th>f</th> </tr> <xsl:apply-templates select="books" /> </table> <div><xsl:value-of select="books/owner" /></div> </html> </xsl:template> <xsl:template match="books"> <xsl:for-each select="book"> <xsl:sort select="publish" data-type="text" order="ascending" /> <xsl:sort select="pDate" data-type="text" order="descending" /> <tr> <td><xsl:value-of select="@isbn" /></td> <td><xsl:value-of select="name" /></td> <td><xsl:value-of select="author" /></td> <td><xsl:value-of select="publish" /></td> <td><xsl:value-of select="price" /></td> <td><xsl:value-of select="pDate" /></td> </tr> </xsl:for-each> </xsl:template> </xsl:stylesheet> 以上のようなソースを作りまして、<html>タグの中に記載したtableの<th>の右側に<td>のセルとして<xsl:for-each>を出力させたいのですが、全てtableの下に連結されてしまいます。 これを右にtdのセルとして出力させるにはどうすればいいのでしょうか? よろしくお願いします | ||||||||||||||||
|
投稿日時: 2006-10-27 09:16
一応XMLも貼った方がいいと思いますよ。あと望んでいる出力の形がいまいち分かりません。HTML自体はbodyタグがないですね。
_________________ 己への戒め 「活動的な馬鹿より恐ろしいものはない」 by ゲーテ | ||||||||||||||||
|
投稿日時: 2006-10-27 09:38
失礼いたしました。
具体的にどういうテーブルを作りたいのか、下のページに書いてみました。 http://www.laajawaab.or.tv/sample.html xmlも書いたほうがいいでしょうか? | ||||||||||||||||
|
投稿日時: 2006-10-27 10:05
はじめまして。
テーブルの一行は<tr>〜</tr>までなので、 <xsl:for-each>内に<th>の内容を記述しなけらば 意図されているようにはなりません。 1行目にa、2行目にb・・・としたいのならば、 position()を使うとよろしいかと。 | ||||||||||||||||
|
投稿日時: 2006-10-27 10:08
まずは、手始めとして、提示されたXSLTから
を削除します。 次いで、xsl:for-eachの中のブロックを、
と書き換えます。 これで、1列目がすべて「a」と出力されてはいるが、想定したレイアウトになったのではないでしょうか? ついで、英字の整形。ここから先は思いつきなので、うまくいかないかもしれません。 先ほど書き換えた
を
に変更します。 これで、目的としたHTMLが出力されたかと。 ここでひとつ疑問が。 books/bookのノード数はあらかじめ6個に固定しているのでしょうか? いまのままだと、fを超えて、データの続く限り出力してしまいます。 | ||||||||||||||||
|
投稿日時: 2006-10-27 10:08
<s>tableタグの使い方を間違えています。thタグはテーブルヘッダですから一番上に表示されるのは当然です。</s> サンプルの出力結果を見ましたが左側がアルファベットになっていますね。あまりXML/XSLは詳しくありませんが恐らく数字に変えた方が簡単だと思います(というかアルファベットの処理が思いつかない)。 勉強も兼ねて簡単なサンプルを書いてみました。お役に立てば幸いです。
# 追記 ちょうどこの件に関する記事や参考になるページを見つけました、アルファベットでも大丈夫みたいです。まだまだ勉強が足りない・・・orz 多階層のXML文書にナンバリング処理を行う 番号付け<xsl:number>のvalue値 # アルファベットで出力するように修正、勉強になりました _________________ 己への戒め 「活動的な馬鹿より恐ろしいものはない」 by ゲーテ [ メッセージ編集済み 編集者: 想馬 編集日時 2006-10-27 10:14 ] [ メッセージ編集済み 編集者: 想馬 編集日時 2006-10-27 10:19 ] [ メッセージ編集済み 編集者: 想馬 編集日時 2006-10-27 10:49 ] | ||||||||||||||||
|
投稿日時: 2006-10-27 10:35
<xsl:number>でアルファベット順に出来たのですね。
勉強になりました。 ところで、
以下のような使い方をよくするので反応してしまいました…。 概念(定義?)として誤っているという事でしょうか? <table> <tr> <th>見出し1</th> <td>データ1</td> </tr> <tr> <th>見出し2</th> <td>データ3</td> </tr> : : </table> | ||||||||||||||||
|
投稿日時: 2006-10-27 10:44
HTMLの仕様みても、thとtdを混在させちゃダメというのは見つけられませんでした。 てゆうか、 http://www.w3.org/TR/html4/struct/tables.htmlに
ってゆう、サンプルあるし。 |