- PR -

HTMLからXSLへパラメータを渡す

投稿者投稿内容
MYK
会議室デビュー日: 2005/10/12
投稿数: 8
投稿日時: 2005-10-12 09:38
はじめまして、MYKと申します。
この会議室の記事には、いつもお世話になっております。

質問なのですが、HTMLからXSLへパラメータを渡す
Scriptを制作しているのですが、今は、

var xslTemp = new ActiveXObject("Msxml2.XSLTemplate");
xslTemp.stylesheet = xslt;
xslProc = xslTemp.createProcessor();
xslProc.input = xml;

このように、スタイルシートをコンパイルして

xslProc.addParameter("XSL側の変数名", 渡したいパラメータ);
xslProc.transform;

っと、こんな感じでXSLに渡しています。

この仕様はIE6.0以降で動作するのですが、IE5.5では動作しません。

どうやら、IE5.5では、Msxml2.XSLTemplateをサポートしていない
ようなのですが、これ以外の方法で、JAVAScriptを使用して、
IE5.5で動作し、HTMLからXSLへパラメータを渡す方法はありますでしょうか?
Anthyhime
ぬし
会議室デビュー日: 2002/09/10
投稿数: 437
投稿日時: 2005-10-12 10:22
xsltのdomを直接書き換えてparamを置き換え、domのtranformNodeを利用して変換すればXSLTemplateなしでいけます。
MYK
会議室デビュー日: 2005/10/12
投稿数: 8
投稿日時: 2005-10-12 10:31
Anthyhime様>
お返事ありがとうございます。申し訳ないのですが
何か例となるソースを書いて頂けるとありがたいです。

何卒、よろしくお願いします。
MYK
会議室デビュー日: 2005/10/12
投稿数: 8
投稿日時: 2005-10-13 10:52
他の方でも、詳しい方がいらっしゃいましたら、
返答をよろしくお願いします。m(__)m
Anthyhime
ぬし
会議室デビュー日: 2002/09/10
投稿数: 437
投稿日時: 2005-10-13 14:40
昔書いたデモです。

コード:
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" />
		<title>xsl test</title>
	</head>
	<script>
	function transform() {
		target.innerHTML = source.transformNode(body);
	}
	function filter(condition) {
		body.getElementsByTagName("xsl:variable")[0].setAttribute("select", condition);
		transform();
	}
	</script>
	<xml id="source">
	<tirlist>
		<tir name="test0" amount="1" type="1"/>
		<tir name="test1" amount="2" type="2"/>
		<tir name="test2" amount="3" type="3"/>
		<tir name="test3" amount="4" type="4"/>
		<tir name="test4" amount="5" type="5"/>
		<tir name="test5" amount="6" type="6"/>
		<map id="abc">
			<entry key="1234567" value="a"/>
			<entry key="2" value="b"/>
			<entry key="3" value="c"/>
			<entry key="4" value="d"/>
		</map>
	</tirlist>
	</xml>

	<xml id="body" style="display:none">
		<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
			<xsl:template match="tirlist">
				<xsl:variable name="condition" select="tir" />
				<body>
					<input id="condition" type="text" checked="" />
					<button onclick="filter(condition.value)">クエリ</button>
					<table width="1102" border="1" cellspacing="0" cellpadding="0">
						<tr>
							<td width="120" height="17">タイプ</td>
							<td width="163" onclick="">でーた</td>
							<td width="689">テスト</td>
						</tr>
						<xsl:for-each select="$condition">
							<tr>
								<td>
									<select name="data">
										<xsl:call-template name="options">
											<xsl:with-param name="map" select="/tirlist/map[@id='abc']/entry" />
											<xsl:with-param name="selectkey" select="@type" />
										</xsl:call-template>
									</select>
								</td>
								<td>
									<xsl:value-of select="@name" />
								</td>
								<td>
									<xsl:value-of select="@amount" />
								</td>
							</tr>
						</xsl:for-each>
						<tr>
							<td>  </td>
							<td>計:</td>
							<td>
								<xsl:value-of select="sum($condition/@amount)" />
							</td>
						</tr>
						<tr>
							<td>  </td>
							<td>平均:</td>
							<td>
								<xsl:value-of select="sum($condition/@amount) div count($condition)" />
							</td>
						</tr>
					</table>
				</body>
			</xsl:template>
			<xsl:template name="options">
				<xsl:param name="map" />
				<xsl:param name="selectkey" />
				<xsl:for-each select="$map">
					<xsl:element name="option">
						<xsl:attribute name="value"><xsl:value-of select="@key" /></xsl:attribute>
						<xsl:if test="@key = $selectkey">
							<xsl:attribute name="selected" />
						</xsl:if>
						<xsl:value-of select="@value" />
					</xsl:element>
				</xsl:for-each>
			</xsl:template>
		</xsl:stylesheet>
	</xml>
	<body id="target" onload="transform()"/>
</html>

MYK
会議室デビュー日: 2005/10/12
投稿数: 8
投稿日時: 2005-10-17 16:44
ソースありがとうございます。
こちらのソースはxmlに書いているのでしょうか?

HTMLから直接XSLにパラメータを渡したいのですが
そのパラメータを渡すのを、すべてJAVASCRIPTでは
できないのでしょうか?

申し訳有りませんが、ご返答お願いします。
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2005-10-17 23:39
XMLデータアイランド
という用語を検索してみましょう
MYK
会議室デビュー日: 2005/10/12
投稿数: 8
投稿日時: 2005-10-18 12:11
MMX様、ありがとうございます。

早速ソースを書いて、実行してみました。
すると、IE6.0では正しく動作するのですが、IE5.5SP2では
またしても動作しません…、innerHTMLを呼び出すところで
「ドキュメント内の異なるスレッドモデルを混合しない」と
エラーが表示されてしまいます…

IE5.5SP2で動作確認済で、HTMLからXSLへパラメータを渡す
方法はありませんでしょうか?

よろしくお願いします。

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