- PR -

XSLTに対してブラウザからパラメータを渡すには

1
投稿者投稿内容
SMILE
会議室デビュー日: 2004/01/02
投稿数: 3
投稿日時: 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
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2004-01-02 21:58
「XSLTスタイルシート書き方講座 (4)XSLTによるデータのソートと変数とパラメータ」より
http://www.atmarkit.co.jp/fxml/tanpatsu/10xslt/xslt04.html
引用:

パラメータをスタイルシートの外部から与えたいこともあります。そのようなときには、xsl:param要素をxsl:stylesheetの直下に置きます。



とのことなので、記述は問題なさそうです。

引用:

 ただし、ブラウザから参照するだけでは、スタイルシートにパラメータを与えることはできません。通常は、XSLTプロセッサをコマンドラインから呼び出すとき、またはXSLTプロセッサをプログラムから呼び出すときにパラメータを与えることになりますが、その呼び出し方はツールごとに異なります。


とのことなので、ブラウザ側から指定できないらしいです。

SMILE
会議室デビュー日: 2004/01/02
投稿数: 3
投稿日時: 2004-01-02 22:56
Smileです。
レスありがとうございます。
XSLTプロセッサを介してのみパラメータを与えられると言う事ですか。
という事は少なくともアプリケーションサーバ等を介さないローカル環境
(XMLもXSLTもローカルに置いた環境)では、パラメータ渡しを実現できない
ということですね。
別の方法を考えてみます。
ありがとうございました。
t-wata
大ベテラン
会議室デビュー日: 2002/07/12
投稿数: 209
お住まい・勤務地: 東京
投稿日時: 2004-01-03 12:32
> という事は少なくともアプリケーションサーバ等を介さないローカル環境
> (XMLもXSLTもローカルに置いた環境)では、パラメータ渡しを実現できない
> ということですね。

JavaScriptなどを使えば、ローカルでもできると思いますが。
SMILE
会議室デビュー日: 2004/01/02
投稿数: 3
投稿日時: 2004-01-04 01:26
レスありがとうございます。
JavascriptについてWebで探してみましたが、以下のように2種類のアプローチを
見つけました。
まだ、問題そのものを解決するような解決策はひらめいてませんけど・・。
・xsltの処理中にJavascript呼び出す。
・ブラウザ表示後にjavascriptを呼び出す。
前者は、IBMのサイトで見つけたものでXSLTプロセッサが関係していそうでした。
なのでこちらはサーバサイドの話なのかなと勝手に判断してしまいました。
後者の場合、すべての表示が終わった後に処理が始まると思うのでパフォーマンスを
考えるといろいろ考えなくちゃいけないことがたくさんありそうですね。
元々データがたまっていくと表示が遅くなるので、このような機能を追加しようと
考えたので、実装したときのパフォーマンスと現状の使い勝手でどちらにするか
考えてみます。
t-wata
大ベテラン
会議室デビュー日: 2002/07/12
投稿数: 209
お住まい・勤務地: 東京
投稿日時: 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

スキルアップ/キャリアアップ(JOB@IT)