- 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へパラメータを渡す
方法はありませんでしょうか?
よろしくお願いします。
|