xsl+xml+cssを使い、1ページに一定数の画像を表示させ、
ページングさせるxslを作っています。
わからないことは
(1)変数の計算方法について
ページの先頭表示データを以下のように定義しました。
<xsl:variable name="TopData" select="1" />
nextボタン押し下げ時に1ページ先の先頭表示データを以下のように計算したいのですが、
<xsl:variable name="TopData" select="$TopData=$TopData+$PageData" />
画面にfalseと表示されてしまいました。
また、backボタン押し下げ時に1ページ前の先頭表示データを以下のように計算したのですが、
ブラウザにエラーが表示されてしまいました。
<xsl:variable name="TopData" select="$TopData=$TopData-$Page" />
(2)urlのパラメータを取得する方法について
nextボタンを以下のように記述しました。
<a href="photo.xml?TopData={$TopData}">
<img width="30" height="30" src="img/aaa.gif" />
</a>
ここで与えたパラメータを、同じxlstファイルで取得し、
値を使うにはどのように記述したらよろしいでしょうか?
ご教授おねがいいたします。
No.2ベストアンサー
- 回答日時:
ちょっとメモ。
1. 何やりたいかはわかった。再帰全く関係ねー。
多分XMLとXSLTだけでは完結せず。他の言語によるプログラムで
XSLTプロセッサに引数を渡すさないと無理っぽい(諦めろってこと)
で,他の言語でやることになるなら
xsl:templateの変数ではなく
xsl:stylesheetの最初の子要素として
<xsl:param name="TopData" select="1" />
を配置する(実際に試してみてはいない)
2.【オマケ】 文法ミス多すぎ。
CDATAに書いたものは単なるテキストノードになるだけ。XSLTの要素にはならないよ、当然。
#XSLTの変数はJavaとかで言うfinalって言えばわかる?
そもそも元のxmlファイルが整形式ではない
×<?xml:stylesheet type="text/xsl" href="hoge.xsl"?>
○<?xml-stylesheet type="text/xsl" href="hoge.xsl"?>
比較演算子が実体参照に直されてないためにXSLTスタイルシートそのものが整形式エラーを出してた。
xsl:attribute直下に何で要素が配置されてるんだよ
xsl:sort のselect属性のpnoは@pnoの誤り
#俺も知らなかった
concat関数の引数はattribute value templateではないようで,
{}で括るとエラーにされた・・・ので
string($TopData+$PageData)
とすることで切り抜けた。
s要素にマッチするテンプレートで出力される
img要素やdiv要素は「XHTMLの名前空間の要素」ではなく「名前空間なしの要素」なので注意
個人的には【xsl:stylesheet要素】に「デフォルト名前空間はXHTMLの名前空間である」っていう名前空間宣言をつけとくのがいいと思う。
XHTMLの名前空間のimg要素はalt属性必須です。
XHTMLの名前空間のa要素の内容も指定しよう
いろいろご指摘ありがとうございます。
一人で煮詰まっていたので、精神的に楽になりました。
分からない言葉も多いので、
調べながらご指摘いただいた部分を修正していこうと思います。
xsltでページング機能を実現できるように
もう少し試行錯誤してみます。
No.1
- 回答日時:
補足要求
「XML」と「(動く動かざるを問わずとりあえず書いて見た)XSLT」と「希望する結果」がわかる小さなサンプルが欲しい。
言葉の説明じゃなくて。
#感覚的には変数の再定義ではなく(できるかわからんのでやったことねーや)
再帰用のテンプレート作ることで対応するような気がする
この回答への補足
(1)ご指摘とおり再帰用のテンプレートを使ったサイトを見つけることができましたので、動作確認してみます。
(2)JavaScriptのlocation.searchでパラメータをとることができるようなのですが、その値をxslの変数に渡す方法がまだわかりません。
以下長いですが、xsltファイルを貼り付けます。
<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja">
<head>
<link rel="stylesheet" href="common.css" type="text/css" media="screen" />
<link rel="stylesheet" type="text/css" href="contents.css" />
<script type="text/javascript" src="js/test.js"></script>
</head>
<body class="c">
<div id="contents">
<xsl:apply-templates />
</div>
</body>
</html>
</xsl:template>
<xsl:template match="s">
<xsl:comment>定数</xsl:comment>
<xsl:variable name="MaxData" select="count(photo)" />
<xsl:variable name="PageData" select="8" />
<xsl:variable name="TopData" select="1" />
<script type="text/javascript">
<![CDATA[
document.write('<xsl:variable name="TopData" select="' + getParamValue()'" />');
]]>
</script>
MaxData : <xsl:value-of select="$MaxData" /><br />
PageData : <xsl:value-of select="$PageData" /><br />
TopData : <xsl:value-of select="$TopData" /><br />
<xsl:for-each select="photo">
<xsl:sort select="pno" data-type="number" order="ascending" />
<xsl:choose>
<xsl:when test="@pno < $TopData">
</xsl:when>
<xsl:when test="$TopData + $PageData -1 < @pno">
</xsl:when>
<xsl:otherwise>
<xsl:if test="(@pno mod 2) = 1">
<div id="c_leftbox">
<div id="c_gif">
<img width="298" height="198" >
<xsl:attribute name="src">
<xsl:value-of select="image" />
</xsl:attribute>
</img>
</div>
<div id="c_memo">
<xsl:value-of select="memo" />
</div>
</div>
</xsl:if>
<xsl:if test="(@pno mod 2) = 0">
<div id="c_rightbox">
<div id="c_gif">
<img width="298" height="198" >
<xsl:attribute name="src">
<xsl:value-of select="image" />
</xsl:attribute>
</img>
</div>
<div id="c_memo">
<xsl:value-of select="memo" />
</div>
</div>
</xsl:if>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
<div id="c_leftyaji">
<xsl:choose>
<xsl:when test="1 < $TopData">
<xsl:comment>コメント
</xsl:comment>
</xsl:when>
<xsl:otherwise>
<img width="30" height="30" src="img/noyaji.gif" />
</xsl:otherwise>
</xsl:choose>
</div>
<div id="c_rightyaji">
<xsl:choose>
<xsl:when test="$TopData + $PageData -1 < $MaxData">
<xsl:comment>コメント
</xsl:comment>
<xsl:element name="a">
<xsl:attribute name="href">
<xsl:value-of select="concat('photo.xml?TopData=',{$TopData}+{$PageData})" />
<img width="30" height="30" src="img/back.gif" />
</xsl:attribute>
</xsl:element>
</xsl:when>
<xsl:otherwise>
<img width="30" height="30" src="img/noyaji.gif" />
</xsl:otherwise>
</xsl:choose>
</div>
</xsl:template>
</xsl:stylesheet>
以下、XMLです。
<?xml version="1.0" encoding="Shift_JIS" ?>
<?xml:stylesheet type="text/xsl" href="contents.xsl" ?>
<s>
<photo pno="1">
<image>img/a.jpg</image>
<memo>memo1</memo>
</photo>
<photo pno="2">
<image>img/a.jpg</image>
<memo>memo2</memo>
</photo>
<photo pno="3">
<image>img/a.jpg</image>
<memo>memo3</memo>
</photo>
<photo pno="4">
<image>img/a.jpg</image>
<memo>memo4</memo>
</photo>
</photo>
</s>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHP MySql ページング 2 2022/09/20 06:38
- Chrome(クローム) Chromeの描画領域を2分割して異なるスクロール位置を同時に表示させることはできますか 1 2023/03/01 16:53
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- PHP PHP echo バックスラッシュの使い方 img要素 2 2023/01/08 22:46
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript html5に変えるとスライドショーが消えてしまった。 3 2022/03/26 19:53
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Webページに関するさまざまな情...
-
ASP.NETでツリービューを作成し...
-
head要素
-
東芝のDynabookなのですがアン...
-
SNMP リンクダウンとノードダ...
-
XMLで特殊文字を扱うにはどうし...
-
XSLで、XMLの空タグを制御したい。
-
xmlファイルが上手にHTMLに変換...
-
UTF-8でエンコーディングとはど...
-
XMLで要素が記述された順番に意...
-
XML、XSLTの適応エラー(IEから...
-
u_shortなどの省略した宣言につ...
-
コンテキストメニュークリック...
-
特殊記号が勝手にエスケープさ...
-
ルート要素ノードが2個ある場合?
-
ToolStripMenuItemの選択(VB)
-
VB.NETで最後フォのフォ...
-
XMLをXSLを使いHTMLに変換した...
-
Visual Basic .NET の識別子は...
-
CPUの考え方を教えてください ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
head要素
-
2つの行動の違い
-
Webページに関するさまざまな情...
-
getElementsByNameの要素数が取...
-
ASP.NETでツリービューを作成し...
-
使用しない要素を無視するには...
-
DOMでの要素名の変更
-
Listからのnull要素を削除方法は?
-
■XSLT■複数のノードを違う属性...
-
MFCでのタブコントロールに...
-
svgをhtmlに埋め込んで使いたい
-
hana no namae osiete kudasai.
-
element of surprise
-
XML:連番要素の全ての子要素にx...
-
VB2005でXMLデータから複数ある...
-
cssで外部ファイルを読み込む
-
XSLTの処理について
-
大規模行列の計算
-
次の要素の値取得
-
フロートってなに?
おすすめ情報