xmlデータをセレクトメニューにセットする方法

このQ&Aのポイント
  • 画面遷移せずにデータベースの内容を利用してセレクトメニューを変更する方法
  • Javascriptを使用してxmlDOMをロードし、値を取り出して新しいセレクトメニューを作成する方法
  • ループを使用してDOMの値を取り出し、既存のセレクトメニューを置き換える方法
回答を見る
  • ベストアンサー

xmlのデータを、セレクトメニューの項目にセットする

こんにちは。やりたい内容の全貌は、以下です。 ・画面遷移させずに ・データベースの内容を利用して ・セレクトメニューの内容をかえる イベントが発生したらJavascriptでxmlDOMをロードする。 (実際はxmlを生成するASPページを呼び出す。ここでデータベースに接続して、必要な項目をxmlタグのValueにセットする。) xmlDOMのノードから値を取り出して、新しいセレクトメニューを作成したい。 というものですが、DOMの値を取り出すループとセレクトメニューを1項目ずつ作成するループの関連付け、それを既存のセレクトメニューと置き換える、方法がわかりません。わかりやすいサンプルなどがあるとよいのですが。。。 みなさまよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • xruz
  • ベストアンサー率50% (72/143)
回答No.1

こんにちはさん、xruzです。こんな感じでしょうか? Window2000sp1+Ie5.5sp2+MSXML3.0sp2で動作確認済み。 [html] <!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title>xml</title> </head> <script type="text/javascript"> <!-- var xXml=new ActiveXObject("Microsoft.XMLDOM"); xXml.async=false; function getOptList(x) { xXml.load(x); // 既存のOption削除 document.f.s.options.length=0; // 新規Option作成 var optList=xXml.documentElement.childNodes; with(document.f.s) { options.length=optList.length; for(var i=0;i<optList.length;i++) { options[i].value=optList[i].getAttribute("value"); options[i].text=optList[i].firstChild.nodeValue; }} } //--> </script> <body> <form method="post" action="a.asp" name="f"> <select name="s" size="1"> <option value="a">aaa<option value="b">bbb<option value="c">ccc </select> <input type="button" value="changeOption" onClick="getOptList('optlist.xml')"> </form> </body> </html> [xml:optlist.xml] <?xml version="1.0" encoding="Shift_JIS"?> <lists> <opt value="green">緑</opt> <opt value="blue">青</opt> <opt value="red">赤</opt> </lists> がんばってくださいね(~:~i

raly-raly
質問者

お礼

めちゃめちゃわかりやすいです! OkWebって、本当、「世の中にはいい人がいるにゃあ」と感動させてくれます。 ありがとうございました。(^o^)

関連するQ&A

  • VBscriptでXMLデータの抽出に関する質問

    教えて下さい。以下のようなXMLファイルがあります。 <?xml version="1.0" encoding="Shift-JIS"?> <ROOT> <INFO> <NO>0001</NO> <NAME>ABC</NAME> <COMMENT> </COMMENT> <AGE>30</AGE> </INFO> </ROOT> これを以下のようにVBScriptにてデータを取り出したいです。 Dim DOM, docRoot, node, nodeList, i, m Dim objADO, objADO2 Dim objRS Dim sqlstmt, strSQL Dim no, comment 'DOMオブジェクト生成 Set DOM = CreateObject("Microsoft.XMLDOM") '同期モード DOM.async = True 'XMLを読み込む DOM.load("11.xml") 'ルートセット Set docRoot = DOM.documentElement 'ノードの設定 Set nodeList = docRoot.selectNodes("/ROOT/INFO") 'ループ For Each node In nodeList For i = 0 to node.ChildNodes.length - 1 Select case node.childNodes(i).nodeName case "NO" no = node.childNodes(i).firstChild.nodeValue case "COMMENT" comment = node.childNodes(i).firstChild.nodeValue End select Next Next ところがCOMMENTタグのようにデータが空のものがあると 「オブジェクトがありません」とエラーになります。 if Not IsNull(node.childNodes(i).firstChild.nodeValue) then というようにもやってみましたが、これでも同じエラーとなってしまいます。 何か方法はないでしょうか?アドバイスを宜しくお願いします。

    • ベストアンサー
    • XML
  • セレクトメニューセレクトメニューへのジャンプ

    こんにちは。 セレクトメニューの選択項目に応じて、もう1つのセレクトメニューの内容を変更する方法は大体理解したのですが、 さらにもう一つ、+もう一つ・・・とセレクトメニューの項目をリンクさせて変更することは可能でしょうか? 例えば、 セレクトメニュー(1) 選択   ↓ ジャンプ セレクトメニュー(2) 選択   ↓ ジャンプ セレクトメニュー(3) 選択   ↓ ジャンプ セレクトメニュー(4) 選択   ↓ 検索用CGI実行 クリック というように選ばれた各項目ごとに次のセレクトメニューにジャンプして項目の変更を行いたいです。 参考サンプル等、 どなたか情報をお持ちの方がおりましたら、 よろしくお願いいたします。

  • xmlファイルが生成されない

    <?php //DomDocumentを呼び出す $dom = new DomDocument('1.0','UTF-8'); //要素ノード[document]を追加 $document = $dom->appendChild($dom->createElement('document')); //新しい要素をdocumentの子要素として挿入する $document->appendChild($dom->createElement('name','名前です')); $document->appendChild($dom->createElement('text','テキストです。')); //字下げや空白を考慮してきれいに整形した出力を行う $dom->formatOutput = true; //同階層にtest.xmlとして保存 $dom->save('test.xml'); //出力 echo $dom->saveXML(); ?> のように、同じディレクトリ内にXMLファイルを生成するphpプログラムを作成してみたのですが、 ブラウザからこのPHPファイルにアクセスしてもXMLファイルが作られません。どうすれば良いのでしょうか。 なにかphp,apache等の設定をしてないからでしょうか。 よろしくお願いします。

    • 締切済み
    • PHP
  • セレクトメニューで2つの項目や値を渡す方法はありますか?

    良かったら教えてください。 セレクトメニューで2つの項目や値を渡す方法は ありますか? 普通は、 <select name="test"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> </select> と言う感じですが、 「テスト」を選ぶと name="test1" name="test2"の項目で、 value="1111" value="2222" 選択項目は、1つですが、2つの項目、 2つの値を次のCGIに渡す事は、 可能でしょうか? 教えてください。

    • ベストアンサー
    • HTML
  • セレクトメニューに値を戻す

    よろしくお願いします。 現在、 (1)「入力ページ」から値を取得しCSVに書き込み (2)特定キーによりCSVの内容を「編集ページ」に読み出し と言うことを行いたいのです。 (1)は問題ないのですが、 (1)の「入力ページ」からセレクトメニューで取得した値を(2)でもセレクトメニューで取得したいのですが可能でしょうか? 要は(1)も(2)も見た目を同じに、 「入力ページ」は新規入力用、「編集ページ」は変更・更新用というふうに使いたいです。 例えば、 セレクト項目の内容が、  北海道  青森県  岩手県  宮城県 となっており、(1)で「青森県」を選択→CSVへ書き込み とし、 (2)の表示の時にセレクトメニューには「青森県」が表示されており、かつ上記の項目が選択可能であるようにしたいのですが、 どなたか情報等お持ちの方いらっしゃいましたら、 よろしくお願いいたします。 webサーバー・・・HP-UX web・・・IE CGI開発言語・・・Perl 開発端末・・・windows2000(Tera Term 使用)

  • セレクトメニューの項目をファイルから

    よろしくお願いいします。 セレクトメニューの項目を別に作成しているテキストファイルから読み込みことは可能でしょうか? aaa.txt 北海道,青森県,岩手県,宮城県,・・・ aaa.html-セレクトメニュー  |北海道|  |青森県|  |岩手県|  |宮城県|  | ・   |  | ・   |  | ・   | webサーバー・・・HP-UX web・・・IE CGI開発言語・・・Perl 開発端末・・・windows2000(Tera Term 使用) 以上、よろしくお願いいたします。

    • ベストアンサー
    • HTML
  • domでのXML作成について

    PHP4.2のdomを使い、下記のようなXMLを作成したいです。 しかし、Itemのノードに対して、NUMBERとNAMEという子ノードを2つつけるやり方が分からず困っています。 PHPは書いて見たのですが、上手くいっていません。 教えていただけると助かります。 宜しくお願いします。 【作成したいXML】 <Response> <Items> <Item> <NUMBER>47</NUMBER> <NAME>沖縄県</NAME> </Item> </Items> </Response> 【PHP】 $dom = domxml_new_doc("1.0"); $Response = $dom->create_element("Response"); $root = $dom->append_child($Response); $Items = $dom->create_element("Items"); $Item = $dom->create_element("Item"); $NUMBER = $dom->create_element("NAME"); $text1 = $dom->create_text_node("47"); $NUMBER->append_child($text1); $NAME = $dom->create_element("NAME"); $text2 = $dom->create_text_node("沖縄"); $NAME->append_child($text2); $Item->append_child($NAME); $Items->append_child($Item); $root->append_child($Items);

    • ベストアンサー
    • PHP
  • セレクトメニューの選択項目変更で入力した値を変更する。

    例 第一選択のセレクトメニューで項目Aを選択。 第二選択で項目Aの数値を取得。 第一選択のセレクトメニューで項目Bを選択。 第二選択で項目Bの数値を取得。 (第二選択はセレクトかテキスト入力の予定です) 取得した値をAもしくはBに代入。 計算式(A*2)+(2/B) もしくは 計算式a (a*2)+10 計算式b (b*2)+10 と言う風に選択項目によって代入位置を変更したいです。 計算式も代入する値も多くあるのでセレクトメニューで選択して その位置を変更したいのですが、どのようにしたらいいのでしょうか? 他に良い方法とかあるものなんでしょうか?? 初心者でサンプル例文を切り張り修正でしか作れません。(-_-;) 専門用語とか詳しく説明されても解らないと思うので、 例文だけでも書いていただいたらありがたいです。 あとはなんとか例文を参考に自分で調べて構文の仕組みを理解するのでお願いします。<(_ _)>

  • 既存のXMLを別のXMLの要素として追加する方法

    JavaでDOMを使用して、既に作成してあるXMLを別のXMLの要素として追加しようと思っているのですが、なかなか上手くいかないので投稿いたしました。 具体的に以下のような既存のXMLファイルがあると仮定して、 <?xml version="1.0" encoding="UTF-8"?> <a> <b>0</b> <c>1</c> <d>2</d> </a> 上記のXMLの親ノード(逆に言えば、このXMLの子ノードとして上記XMLを追加)にあたるXMLは以下のようになっています。 <?xml version="1.0" encoding="UTF-8"?> <A> </A> そして<A>と</A>の間に既存のXMLを追加して、 <?xml version="1.0" encoding="UTF-8"?> <A> <a> <b>0</b> <c>1</c> <d>2</d> </a> </A> のようにしたいと考えています。 よろしくお願いします。

    • ベストアンサー
    • Java
  • XML::DOM / XML::XPathでソート

    XML::DOMで効率的なソートの方法はどんなものがありますでしょうか。 一応動くものは作れたのですが、効率的とは言い難く、しかも ソート項目が一意のデータでないといけないという欠点があります。 ############################################### use XML::DOM::XPath; my $xml = <<EOM; <?xml version="1.0" encoding="UTF-8" ?> <list> <item id="10">Apple</item> <item id="5">Orange</item> <item id="20">Melon</item> </list> EOM my $parser = XML::DOM::Parser->new(); my $doc = $parser->parse( $xml ); ## <item>タグの一覧を作成 my @list = $doc->findnodes('/list/item'); ## <item>タグ id属性一覧を作成 my @idlist = map{ $_->getAttribute("id") } @list; ## id属性順にソート foreach my $id ( sort{ $a<=>$b } @idlist ){ ## id属性値を指定してノードリストを取得 my @item = $doc->findnodes('/list/item[@id='.$id.']'); ## idは一意なのでリストの先頭で固定 print $item[0]->getAttribute('id')."\n"; print $item[0]->getFirstChild->getNodeValue."\n"; } ############################################### ハッシュなら sort{ $hoe{$b} <=> $hoe{$a} } keys %hoe といった方法があるのですが、XML::DOMの場合は同じようにいきません。 良い方法がありましたらお願いします。

    • ベストアンサー
    • Perl