- - PR -
住所で検索したいのですが・・・
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2002-05-22 16:09
こんにちは、
XMLをはじめて1ヶ月のわかばまーくです。 よろしくお願いいたします。 「Ask XML Expert > 顧客管理をXMLで行う方法を教えて」で 顧客の名前でデータを検索していますが これを住所や性別で検索したいと思っています。 HTMLの中のJSを変更すればよいのかと思っていろいろ試しているのですが まだまだ未熟者でうまくいきません。 どなたか御教授お願いいたします。 | ||||
|
投稿日時: 2002-05-22 19:19
変更したいJSを載せていませんでした。すいません。(汗)
といっても、そのままのコピペですが・・ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML> <HEAD> <TITLE>顧客情報検索</TITLE> <SCRIPT language="JavaScript" FOR="window" EVENT="onload"> <!-- // このファイルが読込まれたときの処理 // 再表示用のデータがある場合ブラウザに出力 if (document.hdata.HideData.value != "") { res.innerHTML = document.hdata.HideData.value } else { res.innerHTML = "" } //--> </SCRIPT> <SCRIPT language="JavaScript"> <!-- // 顧客情報からの検索処理 function SearchDsp(cName) { // 再表示用データ格納領域クリア document.hdata.HideData.value = "" res.innerHTML = "" // ワーク用の XML ドキュメントオブジェクト var objDocWk = new ActiveXObject("Microsoft.XMLDOM") // 出力用の新しいルートノードを作成 dstNd = objDocWk.createNode(1, "clientlist", "") // XML ドキュメントオブジェクト生成 var objDoc = new ActiveXObject("Microsoft.XMLDOM") objDoc.async = false // 顧客情報の読込み objDoc.load("person.xml") // 顧客情報のルートノードを取得 var objRootNode = objDoc.documentElement.childNodes // 子ノードが無くなるまで繰返し for (Loop4 = 0;Loop4 <= objRootNode.length-1; Loop4++) { // ルーとノードの子ノードを取得 objNode = objRootNode.item(Loop4) // 要素名をチェック if (objNode.baseName === "person") { // person 要素なら比較対象(氏名)のノードを取得 objName = objNode.childNodes.item(0) // 氏名に検索文字列が含まれているかをチェック if (cName.value != "" && CompStr(objName.text, cName.value) == 1) { // 検索文字列が含まれていた場合、person ノードをコピー cpNd = objNode.cloneNode(true) // コピーした person ノードを出力用の XML ドキュメントに追加 dstNd.appendChild(cpNd) } } } // XML 宣言を作成 pi = objDocWk.createProcessingInstruction("xml", " version=" + '"' + "1.0" + '"') // XML 宣言を追加 objDocWk.insertBefore(pi, objDocWk.childNodes.item(0)) // スタイルシート宣言を作成 pi = objDocWk.createProcessingInstruction("xml-stylesheet", " type=" + '"' + "text/xsl" + '"') // スタイルシート宣言を追加 objDocWk.insertBefore(pi, objDocWk.childNodes.item(1)) // 検索結果のデータをセット objDocWk.appendChild(dstNd) // XSL ファイルの読込みオブジェクトを作成 var objXSL = new ActiveXObject("Microsoft.XMLDOM"); objXSL.async = false; // XSL ファイルを読込み objXSL.load("person.xsl"); // スタイル付けをして表示 document.hdata.HideData.value = objDocWk.transformNode(objXSL); // 表示データをブラウザに出力 res.innerHTML = document.hdata.HideData.value } // 比較処理 function CompStr(srcStr, cmpStr) { // 半角英字をすべて大文字に変換 var str1 = srcStr.toUpperCase() var str2 = cmpStr.toUpperCase() // 比較元と比較先が同じなら1を返す if (str1 == str2) { return 1 } else { // 比較対象文字列に比較文字列が含まれているかチェック var offset = str1.indexOf(str2) if (offset == -1) { return -1 } return 1 } } //--> </SCRIPT> </HEAD> <BODY BGCOLOR="#FFFFFF"> <!-- 検索結果を保存するフィールド --> <!-- 検索結果を保存して再表示の度に検索処理を行わないようにする --> <FORM name="hdata"> <INPUT size="20" type="hidden" name="HideData" value=""> </FORM> <B><FONT size="+3" color="#0000cc">顧客情報検索</FONT></B> <BR/> <BR/> <B><FONT size="+1" color="#008800">検索</FONT></B> <BR/> <!-- 検索フォーム --> <FORM name="SearchData"> <!-- 検索文字列の入力フィールド --> <B><FONT size="+1">氏名 : </FONT></B><INPUT size="30" type="text" name="cname"><BR/><BR/> <!-- 検索ボタン --> <INPUT type="button" name="searchdsp" value="検 索"; onclick="SearchDsp(cname)"> </FORM> <hr/> <!-- 検索結果を表示する場所 --> <DIV id="res"></DIV> </BODY> </HTML> | ||||
|
投稿日時: 2002-05-24 14:59
(「そのままコピペ」されていますが、オリジナルバグ(";"抜けとか)はつぶしてちゃんと動作させていることを前提とします)
とりあえず名前の代わりに住所で検索したい場合、
こんな感じになるんじゃないでしょうか。 私だったらXSLTで検索してしまいますが。 XSLで<xsl:param name="addr"></xsl:param>とか宣言しておいて、例えば <xsl:for-each select="person"> を <xsl:for-each select="person[contains(./address,$addr)]"> にするとか、あるいはfor-eachループの中で<xsl:if>で判定するとか。 DOMでコーディングするより楽です。(XSLTにパラメータを渡す部分は書かなきゃいけませんが^^;) | ||||
|
投稿日時: 2002-05-28 16:20
FlossenEngelさん
回答ありがとうございます。 お返事が遅れて申し訳ありません。 早速試してみます! XMLで検索する方法も教えていただいてありがとうございます! こちらの方も早速ためしてみます。 ありがとうございました! |
1