XmlをDetaSetに読み込んだ場合の属性値所得について

このQ&Aのポイント
  • XmlをDataSetに読み込む際、指定した属性値のみを取得してDataGridViewに表示する方法について困っています。
  • 現在のコードでは、タグ4の全ての属性値が表示されてしまいます。
  • 環境はVB2005を使用しています。
回答を見る
  • ベストアンサー

XmlをDetaSetに読み込んだ場合の属性値所得について

初めて書き込みさせていただきます。 ただいまxmlをDetaSetに読み込ませ、そこから指定した属性値を所得し DataGridViewに表示しようとしているのですが思うようにいかず困っています。できればご享受お願いいたします。 以下、使用するxmlのイメージです。 <?xml version="1.0" encoding="Shift_JIS" ?> <タグ1> <タグ2 属性21="a1" 属性22="a2"> <タグ3 属性31="b1" 属性32="b2"></タグ3> <タグ4 属性41="c1" 属性42="c2"></タグ4> <タグ4 属性41="d1" 属性42="d2"></タグ4> </タグ2> <タグ2 属性21="e1" 属性22="e2"> <タグ3 属性31="f1" 属性32="f2"></タグ3> ○ <タグ4 属性41="g1" 属性42="g2"></タグ4> ○ <タグ4 属性41="h1" 属性42="h2"></タグ4> </タグ2> <タグ2 属性21="i1" 属性22="i2"> <タグ3 属性31="j1" 属性32="j2"></タグ3> <タグ4 属性41="k1" 属性42="k2"></タグ4> <タグ4 属性41="l1" 属性42="l2"></タグ4> </タグ2> </タグ1> 希望する結果: g1 g2 h1 h2 (xmlで○をつけた所の属性値のみをDataGridViewに表示) 一応現在のコード: Dim dset As New DataSet dset.ReadXml("./test.xml") DataGridView.DataSource = dset.Tables(3).DefaultView (この場合、タグ4の全ての属性値 c1~l2 が表示されてしまいます) なお環境はvb2005を使用しています。

  • Reise
  • お礼率50% (1/2)

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

DataViewオブジェクトを RowFilter指示で作ればいいのでは ' ここにブレークポイント設定して dim tbl as DataTable = dset.Table("タグ4") ' tblをクイックウォッチする ' ColumnsやRowsで何か違いがないのかを調べて見ましょう dim dv as new DataView( tbl, "タグ2_Id=1", "",DataViewRowState.CurrentRows) DataGridView1.DataSource = dv といった具合です RowFilteパラメータを タグ2_Id=0の場合 c1,c2 / d1,d2 タグ2_Id=1の場合 g1,g2 / h1,h2 タグ2_Id=2の場合 k1,k2 / l1,l2 が選択できると思いますよ

Reise
質問者

お礼

回答ありがとうございます。 こちらで早速試したところ、無事動作させることができました。 ご教授ありがとうございました。

関連するQ&A

  • 2つのxmlファイルを利用したリレーションシップ(?)に関して

    2つのxmlファイルを使用し、リレーションシップ(?)を作成してDataGridViewに表示させようとしているのですがうまくいきません。ご教授お願いいたします。 xmlファイル1: <タグ1> <タグ2 属性21="a1" 属性22="a2"></タグ2> <タグ2 属性21="b1" 属性22="b2"></タグ2> <タグ2 属性21="c1" 属性22="c2"></タグ2> </タグ1> xmlファイル2: <タグ1> <タグ2 属性21="a1" 属性22="d2"></タグ2> <タグ2 属性21="b1" 属性22="e2"></タグ2> <タグ2 属性21="c1" 属性22="f2"></タグ2> </タグ1> 表示させたい内容: | d2 | a2 | | e2 | b2 | | f2 | c2 |

  • 中身が一部しかわかっていないXMLの読み方

    XML例 <A> <B> bbb </B> <C> <D> ddd </D> </C> </A> C#でXMLを読み、特定のタグの中身を書き換える処理を実装しようしています。 ただしXMLファイルの中に書き換えたいタグ以外にどんなタグがあるかがわかっていません。 上記の例の場合、 「<A> - <C> - <D>のdddを書き換えたい」ということはわかっています。 この場合どのように行うのがよいでしょうか? ネットでのソースを参考に書き換えたい値のタグが見つかるまで再帰処理を行い タグが見つかった場合値を書き換えるような処理を書いてみました。 よくあるやり方や、もっとスマートな方法が有りましたらご教授お願いします。 また直接関係なくともヒントとなるようなものでも結構です。 よろしくお願いします。 void test() { XmlDocument document = new XmlDocument(); // ファイルから読み込む document.Load(filePath); readXML(document.DocumentElement); } void readXML(XmlNode node) { // if(node.Name == "D") // 書き換えたい値のタグか判定する //{ // 値を書き換える処理 //} if (node.HasChildNodes) { node = node.FirstChild; while (node != null) { readXML(node); node = node.NextSibling; } } }

  • EXCELのIF関数の入れ子について

    すみませんよろしくお願いします。 EXCELでセル(A1)~(L1)までに不特定の文字列が入力されており、(M1)に「もし(L1)が入力されていたら(L1)の値を表示、もし(L1)がブランクなら(K1)の値を表示、もし(K1)がブランクなら(J1)の値を表示、もし(J1)がブランクなら(I1)の値を表示・・・・」といった具合で関数を作成したいのです。また、(A1)~(L1)のセルで穴あき状態で入力されていた場合は最も(L1)寄りのセルを表示させたいです。 EXCEL2003のIF関数だと、 =IF(L2="",IF(K2="",IF(J2="",IF(I2="",IF(H2="",IF(G2="",IF(F2="",IF(E2="","",E2),F2),G2),H2),I2),J2),K2),L2) で最後の(A1)までの入れ子を作ることができせん。 EXCEL2007を使用すると、 =IF(L2="",IF(K2="",IF(J2="",IF(I2="",IF(H2="",IF(G2="",IF(F2="",IF(E2="",IF(D2="",IF(C2="",IF(B2="",IF(A2="","",A2),B2),C2),D2),E2),F2),G2),H2),I2),J2),K2),L2) と作成できます。 EXCEL2003で作成するいい方法はありますでしょうか? ご指南の程よろしくお願いします。

  • お判りになる方、是非ともお助け下さい(Excel)

    Excel関数で、以下の関数を使用したいのですが、どうしてもうまくいきません。どうすればよいでしょうか =IF(M5="",L5,IF(AND(M5="",L5=""),K5,IF(AND(M5="",L5="",K5=""),J5,IF(AND(M5="",L5="",K5="",J5=""),I5,IF(AND(M5="",L5="",K5="",J5="",I5=""),H5,IF(AND(M5="",L5="",K5="",J5="",I5="",H5=""),G5,IF(AND(M5="",L5="",K5="",J5="",I5="",H5="",G5=""),F5,IF(AND(M5="",L5="",K5="",J5="",I5="",H5="",G5="",F5=""),E5,IF(AND(M5="",L5="",K5="",J5="",I5="",H5="",G5="",F5="",E5=""),D5,IF(AND(M5="",L5="",K5="",J5="",I5="",H5="",G5="",F5="",E5="",D5=""),C5,IF(AND(M5="",L5="",K5="",J5="",I5="",H5="",G5="",F5="",E5="",D5="",C5=""),B5,IF(B5="",B5,M5)))))))))))) 左から右に4月から3月までの行方向の表があり、入力されたら数値を反映させたいのですが、3月と2月は問題ないものの1月からは反映されません

  • エクセルの使い方についてお教えください。

    エクセルの使い方についてお教えください。 例えば、 a | b | f c | g | j d | h | k | m e | i | l | n | o | のように、右肩下がりになっている列を、 a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | のように一列にまとめる方法は無いでしょうか? 何卒よろしくお願いいたします。

  • Excelで飛び飛びのセル(列)を参照したいのですが…その2

     ある「sheet1」で、G1="A",H1="B",I1="C",J1="D",K1="E",L1="F",M1="G",N1="H",O1="I",P1="J",Q1="K",・・というように文字が入力されているとすると、5列飛びの値A,F,K・・・(G1,L1,Q1・・・)が欲しいのです。そして、その値が「sheet2」に、C5=A,D5=F,E5=K,F5=P・・・となるようにしたいのです。ただ数値が5ずつ増加するのではなく、そのセルに入力されている文字列を参照したいのです。  それをまた、「sheet1」の、G2="A",H2="B",I2="C",J2="D"・・・の値でも同じ事をしたいのですが・・・。  よろしくお願いします。

  • 巨大なCSVの加工(指定列のみの抽出)について

    巨大なCSVの加工(指定列のみの抽出)について 下記のような構成のCSVファイルがあります。 "ID","a","b","c","d","e","f","g","h","i","j","k","l","m" "0001","a","b","c","d","e","f","g","h","i","j","k","l","m" "0003","a","b","c","d","e","f","g","h","i","j","k","l","m" "0004","a","b","c","d","e","f","g","h","i","j","k","l","m" ・ ・ ・ 例えば、 ここから"ID"列と"c"列と"f"列のみ抽出して新たなCSVファイルで保存。 という処理を行いたいのですが、行数が5000万行近くあり、ファイルサイズが80GB程あるので エクセルはおろかアクセスでも開くことができません。 テキストエディタの秀丸64bit版なら開くことができますが、指定列の抽出方法が分かりません。 秀丸のマクロでもVBSでも良く、また膨大な待ち時間がかかっても構わないので実現する方法について お知恵をお貸しください。

  • 解読お願いします!困ってます!

    c:w g:p d:i e:h j:h h:c n:o i:k b:g m:c a:e k:s l:q f:z 誰か賢い方これを解読お願いします!!

  • エクセル関数、変数の設定について

    あの~すみません。エクセル関数、変数の設定について教えてください。 「42」と言う数だけが「42」、「60」、「120」と日々変わります。 何回も書き換えるのは面倒なので変数として「セルのA1」に「42」、「60」、「120」、と書き換えることで下記の処理をしたいのですが、・・・ Sheet1に次の数式があります。 =SUMIF((INDIRECT($J$6)),"=1イ",INDIRECT($L6)) ($J$6)はSheet2!$C$5:$C$42です。 $L6は Sheet2!E$5:E$42 $L7は Sheet2!F$5:F$42 $L8は Sheet2!G$5:G$42 $L9は Sheet2!H$5:H$42 $L10は Sheet2!I$5:I$42 ・・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・・ $L○○は Sheet2Z$5:Z$42 ご教授お願いします。

  • エクセルについて

    エクセルで A B C D E F G H I J K L M N O P Q R … と並んでいるデータを A B C D E F G H I J K L … のように並べ変えたいのですが、最も効率のよい方法を教えてください。 上記のアルファベット1つにセル1つです。 Office2007を使用しています。 以上、宜しくお願い致します。

専門家に質問してみよう