<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
<meta http-equiv="Content-Language" content="ja">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<meta http-equiv="Content-Style-Type" content="text/css">
<script type="text/javascript">
<!--
function SearchName()
{
try {
var targetFile = document.getElementsByName("text1")[0].value;
} catch(e) {
return;
}
var xmldoc = new ActiveXObject("Microsoft.XMLDOM");
var display = document.getElementById("display");
var newDisplay = document.createElement("div");
newDisplay.id = "display";
xmldoc.async = false;
xmldoc.validateOnParse = true;
var fileCheck = xmldoc.load("./test/" + targetFile + ".xml");
var xmlArray = parseArray(xmldoc);
if(!fileCheck) {
newDisplay.appendChild(document.createTextNode("△△△"));
display.parentNode.replaceChild(newDisplay, display);
return;
}
if(!xmlArray["rootnode"]["node2"] && !xmlArray["rootnode"]["node5"]) {
newDisplay.appendChild(document.createTextNode("□□□"));
display.parentNode.replaceChild(newDisplay, display);
return;
}
//1行目の追加
var row = document.createElement("p");
var text = targetFile + " ";
text += xmlArray["rootnode"]["node5"] + " ";
text += "{" + xmlArray["rootnode"]["node3"] + "種目/性別} ";
text += xmlArray["rootnode"]["node7"];
row.appendChild(document.createTextNode(text));
newDisplay.appendChild(row);
//2行目の追加
row = document.createElement("p");
text = " " + xmlArray["rootnode"]["node9"] + " ";
row.appendChild(document.createTextNode(text));
newDisplay.appendChild(row);
//3行目の追加
row = document.createElement("p");
text = " " + (xmlArray["rootnode"]["noded"] == "no" ? "×××" : xmlArray["rootnode"]["node1"]);
row.appendChild(document.createTextNode(text));
newDisplay.appendChild(row);
display.parentNode.replaceChild(newDisplay, display);
}
//オブジェクトの配列変換
function parseArray(xmlObject)
{
var xmlArray = new Array();
var nameArray = new Array();
var nodeNumber = 0;
//子ノードをすべて取得する。
for(var ix = 0; ix < xmlObject.childNodes.length; ix++) {
var thisNode = xmlObject.childNodes.item(ix);
var thisName = thisNode.tagName;
if( !thisName ) {
//テキストノード取得。
xmlArray[nodeNumber++] = thisNode.nodeValue;
} else {
//要素ノードである場合は再帰呼び出しを行う。
if( typeof nameArray[thisName] == "undefined" ) {
nameArray[thisName] = 1;
xmlArray[thisName] = this.parseArray(thisNode);
} else {
if( nameArray[thisName] == 1 )
xmlArray[thisName] = new Array(xmlArray[thisName]);
xmlArray[thisName][nameArray[thisName]++] = this.parseArray(thisNode);
}
}
}
//子ノードがテキストノードのみの場合は値を返す。
if( xmlObject.childNodes.length == nodeNumber )
return xmlArray[0];
else
return xmlArray;
}
// -->
</script>
<title>non-title</title>
</head>
<body>
<form name="form1">
<input type="text" name="text1" size="40">
<input type="button" value=" 検索 " onclick="SearchName();">
</form>
<div id="display">
</div>
</body>
</html><?xml version="1.0" encoding="EUC-JP"?> <rootnode> <node1>111</node1> <node2>222</node2> <node3>333</node3> <node4>m</node4> <node5>555</node5> <node6>666</node6> <node7>777</node7> <node8>888</node8> <node9>999</node9> <nodea>aaa</nodea> <nodeb>bbb</nodeb> <nodec>ccc</nodec> <noded>ddd</noded> <nodee>eee</nodee> </rootnode>
<?xml version="1.0" encoding="EUC-JP"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- テキストで出力 -->
<xsl:output
method="text"
encoding="EUC-JP"/>
<!-- パラメータとデフォルト値(デフォルト値は誤ヒットしないよう調節) -->
<xsl:param name="input.node1" select="0"/>
<xsl:param name="input.node2" select="0"/>
<xsl:param name="input.node5" select="0"/>
<xsl:param name="input.fileName" select="0"/>
<!-- テンプレート -->
<xsl:template match="rootnode">
<xsl:choose>
<!-- node1、node2、node5 がヒットした場合 -->
<xsl:when test="node1 = $input.node1 and node2 = $input.node2 and node5 = $input.node5">
<xsl:value-of select="$input.fileName"/>
<xsl:text> </xsl:text>
<xsl:value-of select="node5"/>
<xsl:text> {</xsl:text>
<xsl:value-of select="node3"/>
<xsl:text>種目/</xsl:text>
<xsl:choose>
<xsl:when test="node4 = 'm'">
<xsl:text>男性</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>女性</xsl:text>
</xsl:otherwise>
</xsl:choose>
<xsl:text>} </xsl:text>
<xsl:value-of select="node7"/>
<xsl:text>
</xsl:text>
<xsl:value-of select="node9"/>
<xsl:text>
</xsl:text>
<xsl:choose>
<xsl:when test="noded = 'no'">
<xsl:text>×××</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="node1"/>
</xsl:otherwise>
</xsl:choose>
<xsl:text>
</xsl:text>
</xsl:when>
<!-- node1 はヒットしたが、node2、node5 の値が空の場合 -->
<xsl:when test="node1 = $input.node1 and node2 = '' and node5 = ''">
<xsl:text>□□□
</xsl:text>
</xsl:when>
<!-- node1、node2、node3 のいずれもヒットしなかった場合 -->
<xsl:otherwise>
<xsl:text>△△△
</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet><?xml version="1.0" encoding="EUC-JP"?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Search Form</title>
<script type="text/javascript" src="search.js"></script>
</head>
<body>
<form action="#">
<p>
<label>node1: <input name="input.node1" value="111" /></label>
<label>node2: <input name="input.node2" value="222" /></label>
<label>node5: <input name="input.node5" value="555" /></label>
<label>fileName: <input name="input.fileName" value="12345" /></label>
<input type="button" value="TEST" onclick="
var result = SearchName (
this.form.elements['input.node1'],
this.form.elements['input.node2'],
this.form.elements['input.node3'],
this.form.elements['input.fileName']
);
this.form.elements['output.test'].value = result;
" />
</p>
<p>
<textarea cols="80" rows="25" name="output.test"></textarea>
</p>
</form>
</body>
</html>/**
* - この関数は、テンプレートを呼び出して結果を返すだけ。
* - Firefox 対応が必要なら XSLTProsessor で書き換える。
* - Microsoft.XMLDOM はメンテナンスが終了しているので、MSXML2 を使う。
* - 検索のたびにファイルを読み込むのは馬鹿馬鹿しいので、フォーム読み込みと同時に
* XSLT プロセッサの作成までしておいた方が良い。
* - ここではファイルの存在チェックをしていない。
*/
function SearchName (nodeValue1, nodeValue2, nodeValue5, fileName) {
// for IE6+
try {
// XML ドキュメントの読み込み
var xmlDoc = new ActiveXObject ('Msxml2.DOMDocument.3.0');
xmlDoc.async = false;
xmlDoc.load (fileName + '.xml');
// XSL ドキュメントの読み込み
var xslDoc = new ActiveXObject ('Msxml2.FreeThreadedDOMDocument.3.0');
xslDoc.async = false;
xslDoc.load ('template.xsl');
// XSL テンプレートの作成
var xslTemp = new ActiveXObject ('Msxml2.XSLTemplate.3.0');
xslTemp.stylesheet = xslDoc;
// XSLT プロセッサの作成
var xsltProc = xslTemp.createProcessor ();
xsltProc.input = xmlDoc;
// パラメータのセット
xsltProc.addParameter ('input.node1', nodeValue1);
xsltProc.addParameter ('input.node2', nodeValue2);
xsltProc.addParameter ('input.node5', nodeValue5);
xsltProc.addParameter ('input.fileName', fileName);
// 変換開始
xsltProc.transform ();
// 結果を返す(このままならテキスト)
return xsltProc.output;
} catch (error) {
throw error;
}
} <input type="button" value="TEST" onclick="
var result = SearchName (
this.form.elements['input.node1'].value,
this.form.elements['input.node2'].value,
this.form.elements['input.node5'].value,
this.form.elements['input.fileName'].value
);
this.form.elements['output.test'].value = result;
" />xmlDoc.load (...);
xmlDoc.setProperty ('SelectionLanguage', 'XPath'); // for MSXML 3.0-
var value1 = xmlDoc.selectSingleNode ('descendant::node1');
var value2 = xmlDoc.selectSingleNode ('descendant::node2');
var value5 = xmlDoc.selectSingleNode ('descendant::node5');var value1 = xmlDoc.selectSingleNode ('descendant::node1').xml;
var value2 = xmlDoc.selectSingleNode ('descendant::node2').xml;
var value5 = xmlDoc.selectSingleNode ('descendant::node5').xml;