- - PR -
XSLTに対してブラウザからパラメータを渡すには
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-01-02 15:48
はじめまして。Smileと申します。
あるXMLデータにはn件のデータが存在して、そのn件の一覧表示を行うXSLTを作成しました。 さらにブラウザから指定された番号以降のデータのみの表示を行うように機能追加を 行いたいので、xsl:paramを先頭に記述してパラメータを取得するようにしました。 ですが、ブラウザ側からは「c:\test.xml&index=10」などと与えてもパラメータが 渡らず、XSLTで指定したデフォルト値が使われてしまいます。 XSLT定義(抜粋)は以下です。 <?xml version="1.0" encoding="shift_jis"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:param name="index" select="0"/> <xsl:template match="/"> <html> <head> ・ ・ ・ ブラウザ側から渡す際のパラメータの記述方法が間違っているのかと 思っているのですが、はどのようにパラメータを渡せばよいのでしょうか。 よろしくお願いします。 環境:Windows2000 IE6.0 | ||||||||
|
投稿日時: 2004-01-02 21:58
「XSLTスタイルシート書き方講座 (4)XSLTによるデータのソートと変数とパラメータ」より
http://www.atmarkit.co.jp/fxml/tanpatsu/10xslt/xslt04.html
とのことなので、記述は問題なさそうです。
とのことなので、ブラウザ側から指定できないらしいです。 | ||||||||
|
投稿日時: 2004-01-02 22:56
Smileです。
レスありがとうございます。 XSLTプロセッサを介してのみパラメータを与えられると言う事ですか。 という事は少なくともアプリケーションサーバ等を介さないローカル環境 (XMLもXSLTもローカルに置いた環境)では、パラメータ渡しを実現できない ということですね。 別の方法を考えてみます。 ありがとうございました。 | ||||||||
|
投稿日時: 2004-01-03 12:32
> という事は少なくともアプリケーションサーバ等を介さないローカル環境
> (XMLもXSLTもローカルに置いた環境)では、パラメータ渡しを実現できない > ということですね。 JavaScriptなどを使えば、ローカルでもできると思いますが。 | ||||||||
|
投稿日時: 2004-01-04 01:26
レスありがとうございます。
JavascriptについてWebで探してみましたが、以下のように2種類のアプローチを 見つけました。 まだ、問題そのものを解決するような解決策はひらめいてませんけど・・。 ・xsltの処理中にJavascript呼び出す。 ・ブラウザ表示後にjavascriptを呼び出す。 前者は、IBMのサイトで見つけたものでXSLTプロセッサが関係していそうでした。 なのでこちらはサーバサイドの話なのかなと勝手に判断してしまいました。 後者の場合、すべての表示が終わった後に処理が始まると思うのでパフォーマンスを 考えるといろいろ考えなくちゃいけないことがたくさんありそうですね。 元々データがたまっていくと表示が遅くなるので、このような機能を追加しようと 考えたので、実装したときのパフォーマンスと現状の使い勝手でどちらにするか 考えてみます。 | ||||||||
|
投稿日時: 2004-01-04 13:01
> xsltの処理中にJavascript呼び出す。
> ブラウザ表示後にjavascriptを呼び出す。 表示後は表示後だけど、MSXMLとかを使って、実際のコンテンツをonload時とかに流し込めばいいんじゃないのでしょうか? <html> <head><script> function loadXML(){ var xmldoc; //= new ActiveXObject("Microsoft.XMLDOM"); xmldoc.load("foo.xml")など var xsldoc; var paramnode = xsldoc.getElementByTagName("xsl:param")[0]; paramnode.text = 指定したい値; foo.innerHTML = xmldoc.transformNode(xsldoc); } </script></head> <body onLoad="loadXML()"> <div id="foo"><!--ここにXSLTの結果を挿入--></div> </body></html> > すべての表示が終わった後に処理が始まると思うのでパフォーマンスを > 考えるといろいろ考えなくちゃいけないことがたくさんありそうですね XSLTの処理は(言語を問わず)馬鹿みたいにパワーを使うので、XSLT処理をクライアントで行う以上は、それ以外のパフォーマンスなんて誤差みたいなもんでしょう。 |
1