XSLT内の変数<xsl:variable>の値をHTMLから変更する。
[サンプルHTML文書を表示](下のフレームに)
getElementsByTagName()メソッドを使い、XSLTから<xsl:variable>のselect属性を全て取り出し、リスト形式でItemsに格納する。こうして取得した2つのselect属性の値に、関数の引数 m,nを代入。ただしコード番号の場合は対応する要素が無いので、直接"コード番号"という文字列を代入する。
サンプルHTMLソース
<SCRIPT language="JavaScript"><!--
var xmlobj;
var xslobj;
function Change(m,n){
var xmlobj=new ActiveXObject("MSXML2.DOMDocument");
xmlobj.async=false;
xmlobj.load("table01.xml");
xslobj=new ActiveXObject("MSXML2.DOMDocument");
xslobj.async=false;
xslobj.load("xslt03.xsl");
var Items = xslobj.getElementsByTagName("xsl:variable/@select");
if(Items.length > 0){
if(m == "xxx")m = "'コード番号'";
Items(0).text = m;
Items(1).text = n;
}
var str = "";
str = xmlobj.transformNode(xslobj);//変更されたXSLTに従いXML文書を変換
dv.innerHTML = str;
}
function View(){
alert("XSL文書を読み込み、2個の変数の内容を変更しました。その内容は\n\n\n"+xslobj.xml);
}
//--></SCRIPT>
</HEAD>
<BODY onload="Change('info/end','end')">
<table style="width:90%"><tr><td>
<BUTTON onclick="Change('info/end','end')">終値を表示する</BUTTON><BR>
<BUTTON onclick="Change('info/total','total')">出来高を表示する</BUTTON><BR>
<BUTTON onclick="Change('xxx','name/@code')">コード番号を表示する</BUTTON>
</td>
<td style="padding-left:2cm;font-size:12px">
<BUTTON onclick="View()">変更されたXSLT内容を見る</BUTTON><br></td></tr></table>
<DIV id="dv" style="margin-left:20px;border:1px solid green"> </DIV>
</BODY>
XMLソース
<?xml version="1.0" encoding="Shift_JIS" ?>
<root>
<title>2003年11月05日の東証株式第一部情報</title>
<info><name>銘柄</name><end>終値(円)</end><total>出来高(千株)</total></info>
<data>
<kabu><name code="6752">松下</name><end>1529</end><total>12302</total></kabu>
<kabu><name code="6753">シャープ</name><end>1786</end><total>3964</total></kabu>
<kabu><name code="6758">ソニー</name><end>4030</end><total>8220</total></kabu>
<kabu><name code="6764">三洋</name><end>516</end><total>7551</total></kabu>
<kabu><name code="6501">日立</name><end>692</end><total>21896</total></kabu>
<kabu><name code="6502">東芝</name><end>440</end><total>17832</total></kabu>
<kabu><name code="6701">NEC</name><end>1027</end><total>19229</total></kabu>
<kabu><name code="6702">富士通</name><end>708</end><total>16634</total></kabu> </data>
<end>以上です(2004/8/18)</end>
</root>
XSLソース
<?xml version="1.0" encoding="Shift_Jis"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="Shift_JIS"/>
<xsl:template match="/">
<H4><xsl:value-of select="root/title"/></H4>
<xsl:apply-templates select="root"/>
</xsl:template>
<xsl:template match="root">
<table border="1" style="margin-left:1cm;margin-top:-4mm;border:2px solid red">
<tr style="color:blue">
<xsl:variable name="var1" select="" />
<td><xsl:value-of select="info/name"/></td>
<td><xsl:value-of select="$var1"/></td>
</tr>
<xsl:for-each select="data/kabu">
<xsl:variable name="var2" select="" />
<tr>
<th style="color:green"><xsl:value-of select="name"/></th>
<td style="text-align:right"><xsl:value-of select="$var2"/></td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
end(04/8/18)