• 締切済み

SelectNodsを使っての検索

<DB>   <kojin>     <no>1</no>     <name>山田</name>     <keireki>       <kaisha>    <nyuusha>1999/04/01</nyuusha>    <kname>A社</kname>       </kaisha>       <kaisha>    <nyuusha>2001/04/01</nyuusha>    <kname>B社</kname>       </kaisha>         </keireki>   </kojin>   <kojin>     <no>2</no>     <name>鈴木</name>     <keireki>       <kaisha>    <nyuusha>1999/04/01</nyuusha>    <kname>B社</kname>  </kaisha>     </keireki>   </kojin> </DB> 以上のようなXMLを作成した場合に、 <nyuusha>'1999/04/01'で <kname>が'A社'の<kojin>の情報を 取得したい場合はどうしたらよいのでしょうか? selectNodesを使ってデータの取得をしたいと 考えていますので、できましたらselectNodesを 使ったやり方を教えてください。 よろしくお願いいたします。

  • XML
  • 回答数2
  • ありがとう数19

みんなの回答

  • flame
  • ベストアンサー率100% (3/3)
回答No.2

上記の回答の修正です。 var knameNode = nyuushaNodes(i).parentNode.selectSingleNode("nyuusha"); の最後のnyuushaを、knameに置き換えてください。

  • flame
  • ベストアンサー率100% (3/3)
回答No.1

こんな感じでしょうか。(JScriptで書くので、適宜他の言語に置き換えてください。JScript,VBScript以外ではテキストノードの取得方法が違うので注意を) var resultNodes = new Array(); var nyuushaNodes = DB.documentElement.selectNodes("//nyuusha"); for (var i = 0; i < nyuushaNodes.length; i++) {  if (nyuushaNodes(i).text == "1999/04/01") {   var knameNode = nyuushaNodes(i).parentNode.selectSingleNode("nyuusha");   if (knameNode.text == "A社") {    resultNodes[resultNodes.length] = nyuushaNodes(i).parentNode;   }  } } 上記のコードで、条件を満たすノードのリストが取得できるはずです。(動作テストはしていません) 何が何でもselectNodesを使えばいいというものではないので、適宜他のメソッドを使い分けましょう。

関連するQ&A

  • VB2005でXMLから複数ある要素の項目を取得する方法

    VB2005、XMLの初心者です。 下記XMLの「ヤマダタロウ」を抽出するのがうまくいきません。 <Module> <Body> <Item Code= A TableId=001> <Name>ヤマダタロウ</Name> </Item> <Item Code= B TableId=001> <Name>山田太郎</Name> </Item> </Body> </Module> 上記XMLがmsxmlDocとして引数で下記プロシージャに渡されるのですが、selectNodesではなぜか取得できません。 どこか間違っているでしょうか。 Private Sub prvParseXML(Byval msxmlDoc As MSXML2.DOMDocument) Dim NodeList As MSXML2.IXMLDOMNodeList NodeList = msxmlDoc.selectNodes("/Module/Body/Item[@Code='A'][@tableId='001']/Name") End Sub 何かヒントになるようなことでも良いので、皆様の知恵をお借りできれば幸いです。 よろしくお願い致します。

  • データの取得方法

    Aテーブル{ id char(3) not null, name varchar(10), a_no char(5), b_no char(5), c_no char(5), date timestamp } Bマスタ{ no char(5), name char(10) } 上記のようなDBがあるのですがAテーブルのa_no、b_no、c_noに入るのはBマスタのnoになります。 下記のようにデータを取得したい場合、どうすればうまく取得できるのでしょうか。 A.id, A.name, A.a_no, カラム名をname1としてB.name, b_no, カラム名をname2としてB.name, c_no, カラム名をname3としてB.name そんなに難しいことではないと思うのですが、考えれば考えるだけ頭の中でこんがらがってきて困っています。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • エクセルについての質問です。

    エクセルについての質問です。 下記のような表があります。 名前  NO 時間     NO 時間  名前  時間 山田  A  10      A  40  山田  10     B  20             鈴木  30 鈴木  A  30      B  60  山田  20     B  10             鈴木  10     C  20             井上  30 井上  B  30      C  20  鈴木  20 左の表から右の表を作成するのに分かりやすい関数がありますでしょうか。 よろしくお願いいたします。

  • エクセルで検索、並び替えの方法

    エクセルで以下のような並び変えはできないでしょうか? エクセルでA列とB列に名前が入っています。 A列、B列の名前は若干違います。 B列の名前をA列に揃えて並び変えることはできないでしょうか?  「処理前」       「処理後」  A   B        A   B 伊藤  山田      伊藤         山田  田中      山田  山田 鈴木  鈴木      鈴木  鈴木 田中  伊集院     田中  田中                     伊集院 宜しくお願いします。

  • xml

    今契約してるサーバーがSQLをつけるとものすごい金額になってしまうので。XMLに挑戦中です。 作ってみたのですが、ソースが間違ってる?のか表示できません、教えてください. name.xml <?xml version="1.0" encoding="shift-jis"?> <test no="1"> <name>test</name> <no>10</no> <tel>123-456-789</tel> </test> test.php <html> <head> <title>sample1</title> </head> <body> <?php $doc->load("name.xml"); $name = $doc->selectSingleNode("test"); $list = $name->selectNodes("*"); $no = $list->item(1); $text = " 番号 " . $no . "<br>"; print $text; ?> </body> </html>

    • ベストアンサー
    • PHP
  • jQueryでxmlを読み込んで、五十音順にソート

    jQueryでxmlを読み込んで、五十音順にソート qa6111214でjQueryでXMLを操作する方法について質問させていただいた者です。 たびたび申し訳有りません。質問させていただきます。 jQueryでxmlで読み込んで、五十音順にソートしたいのですが方法がわかりません。 ---------------------------------------------------------------------------------------------------- <data> <item> <link>hoge1.html</link> <name>山田 太郎</name> <syllabary>やまだたろう</syllabary> </item> <item> <link>hoge2.html</link> <name>山田 花子</name> <syllabary>やまだはなこ</syllabary> </item> <item> <link>hoge3.html</link> <name>田中 太郎</name> <syllabary>たなかたろう</syllabary> </item> <item> <link>hoge4.html</link> <name>田中 花子</name> <syllabary>たなかはなこ</syllabary> </item> <item> <link>hoge5.html</link> <name>鈴木 太郎</name> <syllabary>すずきたろう</syllabary> </item> <item> <link>hoge6.html</link> <name>鈴木 花子</name> <syllabary>すずきはなこ</syllabary> </item> </data> ------------------------------------------------------------------------------------------------ というxmlデータをjQueryで読み込んで、五十音順にソートして表示する方法を探しています。 例えば…… ------------------------------------------------------------------------------------------------ <a href="hoge5.html">鈴木 太郎</a> <a href="hoge6.html">鈴木 花子</a> <a href="hoge3.html">田中 太郎</a> <a href="hoge4.html">田中 花子</a> <a href="hoge1.html">山田 太郎</a> <a href="hoge2.html">山田 花子</a> ------------------------------------------------------------------------------------------------ といった具合に書き出したいのですが…… ご教授願います。また、参考になりそうな書籍/サイトはありますでしょうか。 宜しくお願い致します。

  • Postgresqlでのテーブル作成について

    どなたかご教授願えますでしょうか。 <マスタ> <トランザクション> Kaisya Kojin-NO Simei      kaisya saiban-NO Kojin-NO AAA   0001   名前A1      AAA   1     0002 AAA   0002   名前A2      AAA 2     0001 BBB   0001   名前B1  ⇒   BBB 1 0001 BBB   0002   名前B2      BBB 2 0002 CCC   0001   名前C1      CCC 1 0002 CCC   0002   名前C2      CCC 2 0001 マスタのkaisyaとKojin-N0をキーにするべく各項目指定の後に constraint KEY_NAME primary key ( Kojin-NO, kaisya      ) として複合のキー設定をしてテーブルを作成しました。このマスタテーブルは作成できたのですが、 トランザクションを作成しようとCreate Tableを使用しましたが ERROR:relation "Key_name" already Exists となり作成できません。 ちなみにトランザクションのsaiban-NO、KaisyaがPrimary Key Kaisyaとkojin-NOをマスタの外部キーとして設定しようとしていました。 そもそもこの考え方が間違っているのでしょうか。

    • 締切済み
    • PHP
  • MYSQLのレコードを上書きしたいのですが…

    phpからMYSQL5に接続して以下のようなデータベースを作りました。 no name comment ←カラム名 1  山田 起きる 2  山田 叫ぶ 3  山田 寝る これを上書きして、 no name comment 1  山田 食べる 2  山田 遊ぶ 3  山田 寝る というようにレコードを更新したいのです。 しかし、どうやっても1、2、3の後に4、5、6と続いてしまいます。 「no」カラムにはauto_increment+primary keyを設定しています。 phpで構文を送る前に mysql_query("alter table db1 auto_increment=0"); を設定してみたり、 mysql_query("insert into db1 (name,comment) value ('山田','$comment')"); や mysql_query("replace into db1 (name,comment) value ('山田','$comment')"); を試してみましたが、上手く行きませんでした。 現在は、 mysql_query("delete from db1"); mysql_query("alter table db1 auto_increment=0"); ---php処理--- mysql_query("insert into db1 (name,comment) value ('山田','$comment')"); というように、二度目の書き込みを行う前に一旦テーブル内のレコードを すべて削除して書きなおすという方法を取っています。 しかし、数が多くなると一旦削除する作業を行うと処理が遅くなってしまうと思いますので、上書きしてデータベースを更新したいと思っているのですが、どのようにすればよいでしょうか?

    • ベストアンサー
    • MySQL
  • SELECT命令

    SELECT A.code, A.name, B.name FROM DB_A A, DB_B B WHERE A.code = B.code; この時、DB_BにCODEが存在しなくてもDB_Aの情報は取得したのですが「+」を付加して条件を満たす方法があったと思うのです? 宜しくお願いしま。

  • アクセスのクエリについて教えてください。

    アクセス初心者です。 AテーブルとBテーブルを合体したCテーブルを作成したいのですが、 クエリを使って1工程でできませんでしょうか。 レコードが1000を越えると大変な作業になりますので、 何か良い方法を探しております。宜しくお願いします。 Aテーブル 顧客No  名前  住所  1     鈴木  東京  2     田中  横浜 Bテーブル 顧客No  名前  電話  1     鈴木  03  3     山田  044 Cテーブル 顧客No  名前  住所  電話  1     鈴木  東京  03  2     田中  横浜  3     山田      044              以上

専門家に質問してみよう