ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

XSL/XSLTコミュのXSLテンプレートの書き方

  • mixiチェック
  • このエントリーをはてなブックマークに追加
初心者で、まだ何も分からないのですが、質問させて下さい。

XML文書のなかで、フラットでない構造の部分をそのままHTMLのテーブルと同じ形で表示したいのですが、どうすればいいのか全く分かりません。
以下のような構造を持ったXMLをXSL上でどのようなテンプレートを作ればいいのでしょうか?

<Root>
<record>
<書き出し料金>
<料金表>
<料金表列>
<料金表セル></料金表セル>
<料金表セル></料金表セル>
<料金表セル></料金表セル>
<料金表セル></料金表セル>
</料金表列>
<料金表列>
<料金表セル></料金表セル>
<料金表セル>8,505</料金表セル>
<料金表セル>6,615</料金表セル>
<料金表セル>5,670</料金表セル>
</料金表列>
<料金表列>
<料金表セル></料金表セル>
<料金表セル>8,978</料金表セル>
<料金表セル>7,088</料金表セル>
<料金表セル>6,143</料金表セル>
</料金表列>
</record>
</Root>

形としては<書き出し料金>=<table>、<料金表列>=<tr>、<料金表セル>=<td>というように、HTMLとまったく同じ構造になっているので、簡単だと思ったのですが、なかなか出口がみえません………

コメント(5)

http://www.atmarkit.co.jp/fxml/indexes/index_col.html#sp1

僕も先週からXMLを始めたばかりですが、↑の連載なんかが参考になりました。for-eachを組み合わせれば簡単に出来ると思います。

ただ、上の奴ですけど、記入ミスだと思いますが<書き出し料金>と<料金表>が閉じられていないのでXMLではエラーになってませんか?
for-each を使わない方法だと、こんな感じ。

<?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="node() | @*">
<xsl:apply-templates />
</xsl:template>

<xsl:template match="料金表">
<table><xsl:apply-templates /></table>
</xsl:template>

<xsl:template match="料金表列">
<tr><xsl:apply-templates /></tr>
</xsl:template>

<xsl:template match="料金表セル">
<td><xsl:value-of select="."/></td>
</xsl:template>
</xsl:stylesheet>
Itomoさん>

ご指摘ありがとうございました。上記は実際のファイルの一部抜粋だったので、終了タグをコピペし忘れました(--;
エラーは起きないのですが、料金表の中身が一列で表示されてしまって、表組になってくれないのです………

geev@れぽたさん>
へいきち。さん>
ご指導ありがとうございました。
きちんと表示することが出来ました(^^)(当たり前か……
XSLに取り組み始めたばっかりなのですが、勉強不足で恥ずかしいです(--;
このあと、料金表のサイズに合わせてテーブルの大きさを変えたりしないといけないのですが、頑張って取り組んでみます。(^^)

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

XSL/XSLT 更新情報

XSL/XSLTのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング