JavaScriptでXMLレコードセットの検索・抽出

このQ&Aのポイント
  • JavaScriptを使用してXMLレコードセットを検索・抽出する方法について紹介します。
  • XML形式で取得したレコードセットを条件指定して検索・抽出する方法を解説します。
  • 特定の条件に一致するXMLレコードの値をJavaScriptで抽出する方法について詳しく説明します。
回答を見る
  • ベストアンサー

JavaScriptでXMLレコードセットの検索・抽出

お世話になります。 blue-horse と申します。 JavaScript上に、データベースのテーブルをXML形式で取出しました。 このXMLレコードセットをSQLのWHERE条件の様に、条件指定して検索・抽出したいのですが、どの様な方法があるのでしょうか。 現在は、ノードを順次巡って一致すればフラグを立て(以下略) と言う方法で考えていますが、ややこしくて仕方ありません。 何か良い方法がございましたら、ご紹介頂ければ有り難いです。 以下、やりたいことサンプル -------------------------------------------------------------- XML1: <recordset>   <record row='001'>     <col_01>abc</col_01>     <col_02>123</col_02>     <col_03>XXX</col_03>     <col_04>AAA</col_04>   </record>   <record row='002'>     <col_01>abc</col_01>     <col_02>456</col_02>     <col_03>ABC</col_03>     <col_04>AAA</col_04>   </record>   <record row='003'>     <col_01>abc</col_01>     <col_02>456</col_02>     <col_03>ABC</col_03>     <col_04>CCC</col_04>   </record>   <record row='004'>     <col_01>xyz</col_01>     <col_02>123</col_02>     <col_03>BBB</col_03>     <col_04>AAA</col_04>   </record> </recordset> 上記のXML1がJavaScript上に取得されており、それを操作して、 col_02 = '456' かつ col_03 = 'ABC' に一致する col_04 の値を抽出したXML2をJavaScript上に生成したい。

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

  • ベストアンサー
  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.1

XPath, XQuery,等XSL関連を調べてみたらどうでしょうか JavaScriptからXpathを使う仕組みとして JavaScript-XPathがあります。 公式サイト http://coderepos.org/share/wiki/JavaScript-XPath 参考 https://developer.mozilla.org/ja/Introduction_to_using_XPath_in_JavaScript http://d.hatena.ne.jp/amachang/20071112/1194856493 SQLの様なアクセスを実現するのは、XQueryですが、JavaScript単体では まだ、実装されていないような?

blue-horse
質問者

お礼

yyr446 様 回答ありがとうございます。 JavaScript単体では無理そうなんですね。 残念です。 XPath,XQuery,XSLについては、この連休中に調べてみます。 取り急ぎお礼まで。 ありがとうございます。

blue-horse
質問者

補足

ご紹介頂いたJavaScript-Xpathで上手く行きそうです。 利用方法もライブラリを読み込むだけなので簡単で、参考サイトの内容も非常に役立ちました。 yyr446様、重ねてお礼申し上げます。 ありがとうございました。

関連するQ&A

  • 特定の項目が同じ値のレコードを1件だけ出力するには

    教えて下さい。全くいいSQLが思い浮かびません^^; Table:Tbl(Primary Col1, Col2) ================================================ Col1, Col2, Col3, Col4, Col5, Col6 ------------------------------------------------ No1, Row1, ABC1, 1, DEF1, 1 No1, Row2, ABC1, 1, DEF1, 2 No2, Row1, ABC1, 1, DEF1, 1 No2, Row2, ABC1, 1, DEF1, 2 ================================================ 以上のテーブル情報の時、 Col3とCol4をキーにしてレコードを抽出します。 但し、抽出するレコード内容にCol5とCol6が同一なレコードは1件もありません。 上記テーブルから取り出したいレコードは以下の通りです。 Table:Tbl(Primary Col1, Col2) ================================================ Col1, Col2, Col3, Col4, Col5, Col6 ------------------------------------------------ No1, Row1, ABC1, 1, DEF1, 1 No1, Row2, ABC1, 1, DEF1, 2 ================================================ どういうSQLで上記のような抽出が可能になるでしょうか? 宜しくお願い致します。

  • LIKEを使用したレコード抽出について

    OracleでLIKEを使用したレコード抽出で困っています。 あるテーブル(TAB_A)が以下のような属性だとします。 ------------- COL1 CHAR(5) COL2 CHAR(5) このとき、このテーブルに次のようにデータが格納されています。 COL1  COL2 -------------- ABC==  12345 [=]は便宜上1バイトスペースを表す このテーブルを対象として (1) SELECT * FROM TAB_A WHERE COL1 LIKE 'ABC%'; (2) SELECT * FROM TAB_A WHERE COL1 LIKE 'ABC==';   ([=]は便宜上1バイトスペースを表す) (3) SELECT * FROM TAB_A WHERE COL1 LIKE 'ABC'; というSQLを発行した場合に、いずれもレコードが抽出されてしまいます。(1)(2)の場合は当然だとは思うのですが、(3)でもレコードが抽出されることが理解できません。このようなことが起こり得るのでしょうか。

  • ある条件を持たないレコードの抽出

    下記のようなデータがあります。 col1 col2 ========== 001 AAA 001 BBB 001 CCC 002 AAA 002 CCC 003 BBB 003 CCC 004 AAA col2 にBBB を持たないレコードを抽出したいのですが どのようにSQLを記述すればよいかご教授ください。 得たい結果 002 004 どうぞよろしくお願いいたします。

  • ADOでNullフィールドの抽出

    VB6.0+ADO2.7で、mdbファイルを扱っています。 .filterプロパティを使ってabcフィールドの値がnullまたは空のテーブルを抽出したく recordset.filter="abc= null or abc=''" としました。この場合は問題ないのですが、更にdefフィールドの条件を追加し recordset.filter="(abc= null or abc='') AND def= 'xyz'" としたところ 「実行時エラー3001 引数が間違った型、許容範囲外、または競合しています。」 というエラーが発生してしまいます。 また、 recordset.filter="abc= null AND def= 'xyz'" 或いは recordset.filter="abc='' AND def= 'xyz'" では問題ありません。 何が悪いのでしょうか? よろしくお願いします。

  • xmlをjavascriptで読み込み、HTMLに表示させようとしてい

    xmlをjavascriptで読み込み、HTMLに表示させようとしています。 IEでは出来たのですが、それ以外でのブラウザでどうしても読み込むことが出来ません。 簡単なxmlを作ります。例えばこの『これを表示』というテキストをfirefoxで表示させたい場合はどのように書けば良いのでしょうか? <?xml version="1.0" encoding="UTF-8"?> <items> <item>これを表示</item> </items> 今はこのようなjsを作っています。 アラートのAAAでxmlのテキストを表示させるようにしたいのですが・・・ ノードへのアクセス方法?が間違っているのはわかっているんです。ただ、検索して調べても色々出てきて、色々試しても上手くいかず・・・どうしても分がわかりません。 すみません、どなたかご指摘お願い致します!! xmlData = new XMLHttpRequest(); // XMLドキュメントをDOMで扱うためのオブジェクトを作る xmlData.overrideMimeType("sample.xml"); // XMLドキュメントを読み込む var AAA = xmlItemData.documentElement.childNodes[1].childNodes[1].text; alert(AAA); 宜しくお願い致します。

  • 別々のフォルダに収められているXMLファイルから特定のノードを抽出する方法

    XMLデータを検索、抽出する場合の方法について教えて下さい。 複数のXMLファイルが100以上の複数のフォルダに収められています。 (フォルダは作成日時となっており、規則性があります) 別々のフォルダに収められているXMLファイルから特定のノードを抽出する場合にはどのような方法で行うのが良いのでしょうか? Xqueryがよいのでしょうか?それともXSLTが良いのでしょうか? いろいろ調べてみましたが、異なるフォルダから特定のノードを検索、抽出する方法が見つかりませんでした。 どなたかご教授いただきたく、よろしくお願いします。 なお、これから学習するような状況ですので、良い本なども教えて頂けるとありがたいです。

    • 締切済み
    • XML
  • 2つのテーブルからレコードを抽出する方法

    お世話になります。MySQLに関する質問です。 TABLE1とTABLE2の2つのテーブルからレコードを抽出する際、 TABLE1からは全項目のデータを取得し、TABLE2からは一部の項目の データを取得したいと考えています。 条件は、TABLE1とTABLE2を[No]という項目の値で紐(ひも)づけます。 (1) SELECT * FROM TABLE1 (2) SELECT COL_A, COL_B, COL_C FROM TABLE2 上記(1)(2)のレコードを1つのSQLで取得する方法について、どなたかご教授願えますか?

    • ベストアンサー
    • MySQL
  • <SQL>条件付きで最小値レコードを抽出する方法

    SQLite3.7.5を使っています。 以下<抽出前>の様なテーブルから、col2の値が"FALSE"で(col1=3,4,5の3つ)かつ、col3が最小値(col3=3)であるレコードを<抽出後>のように抽出するSQL文をご教示ください。 <抽出前> col1 | col2 | col3 1 | true | 3 2 | true | 0 3 |false | 3 4 |false | 5 5 |false | 3 <抽出後> col1 | col2 | col3 3 |false | 3 5 |false | 3 自分で考えたSQL文は以下です。 抽出結果は問題ないのですが、同じSELECT文を2回書いていてだいぶ効率悪いことをしているのではないかと思い質問しました。 よろしくお願い致します。 SELECT * FROM (SELECT * FROM test WHERE (col2 = false)) WHERE col3 = (SELECT min(col3) FROM (SELECT * FROM test WHERE (col2 = false)))

  • JQueryでXML検索

    お世話になります。 blue-horse と申します。 JQueryでXML文書の検索・抽出を行おうとしています。 が、フィルタが上手く行きません。 どこがどうおかしいのでしょうか。 ご教示ください。 参考になるサイト等も教えて頂ければありがたいです。 [XML例] <?xml version='1.0' encoding='UTF-8'?> <xml_recordset>   <record>     <field_A>北海道</field_A>     <field_B>北海道</field_B>     <field_C>札幌市</field_C>   </record>   <record>     <field_A>青森</field_A>     <field_B>東北</field_B>     <field_C>青森市</field_C>   </record>   <record>     <field_A>秋田</field_A>     <field_B>東北</field_B>     <field_C>秋田市</field_C>   </record>   <record>     <field_A>岩手</field_A>     <field_B>東北</field_B>     <field_C>盛岡市</field_C>   </record>   <record>     <field_A>山形</field_A>     <field_B>東北</field_B>     <field_C>山形市</field_C>   </record>   <record>     <field_A>宮城</field_A>     <field_B>東北</field_B>     <field_C>仙台市</field_C>   </record>   <record>     <field_A>福島</field_A>     <field_B>東北</field_B>     <field_C>福島市</field_C>   </record> </xml_recordset> [JavaScript] // JQueryは読み込み済みです var my_xml = get_xml(); //自作関数,XMLを取得,動作確認済み $my_record = $(my_xml).find("field_B"); alert($my_record.length); //成功,7が表示されます $tohoku = $(my_xml).find("field_B:contains('東北')"); alert($tohoku.length); //失敗,何も表示されません(6が表示されることを期待)

  • 検索にて抽出されたレコードをほかのテーブルに追加

    フォームで検索条件指定ご、マクロにて検索ボタンクリック時にフィルタ実行で、入力した条件と一致するものが抽出されるようになりました。 そこで抽出されたレコードをすでに作成してある検索履歴テーブルへ追加していき、あとでその履歴が見れるようにしたいのです。 イロイロ検索したところ、追加クエリを使用するように思うのですが、使い方が良くわからなく困っています。 詳しく教えてくれる方よろしくお願いします。 マクロのWhere条件は [姓フリガナ]=[Forms]![F照会]![姓検索] And [名フリガナ]=[Forms]![F照会]![名検索] And [生年月日]=[Forms]![F照会]![生年月日検索] 姓名フリガナ生年月日が一致するもの この抽出されたレコードのIDと、検索日を履歴としてのこしていきたいです。

専門家に質問してみよう