XMLデータをDataTableに格納し取得するには

解決


suisuisui  2005-03-10 19:28:55  No: 120158

ASP.NET(VB.NET)でXMLのデータを読み込みDataTableに格納し、
エクセルに吐き出しています。
そこで質問です。(XMLは初心者です)

XMLの階層が深いとうまくDataTableのDataRowが取得できないのですが
その原因や取得する方法がわかりません。

以下サンプルです。

【NG】
<?xml version="1.0" encoding="shift_jis" standalone="yes"?>
<NewDataSet>
<DetailDataSet>
<Data>
<AAA>あああ</AAA>
<BBB>いいい</BBB>
<CCC>ううう</CCC>
</Data>
</DetailDataSet>
<DetailDataSet>
<Data>
<AAA>えええ</AAA>
<BBB>おおお</BBB>
<CCC>かかか</CCC>
</Data>
</DetailDataSet>
</NewDataSet>

【OK】
<?xml version="1.0" encoding="shift_jis" standalone="yes"?>
<NewDataSet>
<DetailDataSet>
<AAA>あああ</AAA>
<BBB>いいい</BBB>
<CCC>ううう</CCC>
</DetailDataSet>
<DetailDataSet>
<AAA>えええ</AAA>
<BBB>おおお</BBB>
<CCC>かかか</CCC>
</DetailDataSet>
</NewDataSet>

【OK】は<Data></Data>タグを減らしました。

XMLファイルはGlobal.asaxのApplication_Startで
DataSetに格納し"MyDataTable"という名でApplicationに追加しています。

以下コードです(他のExcelオブジェクトなどは省略):

Dim oRange As Excel.Range
Dim dt As DataTable = CType(Application.Item("MyDataTable"), DataTable)

〜省略〜

DumpData(dt, oRange)

Private Function DumpData(ByVal dt As DataTable, ByVal oCells As Excel.Range) As String

Dim dr As DataRow, ary() As Object
Dim iRow As Integer, iCol As Integer

For iRow = 0 To dt.Rows.Count - 1
    dr = dt.Rows.Item(iRow)
    ary = dr.ItemArray
    For iCol = 0 To UBound(ary)
        oCells(iRow + 5, iCol + 1) = ary(iCol).ToString
        Response.Write(ary(iCol).ToString & vbTab)
    Next
Next

End Function

【OK】のXMLファイルは問題なくエクセルに出力されるのですが
【NG】はary = dr.ItemArrayでaryに値が入っていません。

なんでも良いのでアドバイス願います。
よろしくお願いいたします。


じゃんぬねっと  URL  2005-03-10 19:53:31  No: 120159

さて、どちらかで続けましょうね。
http://www.ailight.jp/BBS/Detail.aspx?Header_ID=1409


suisuisui  2005-03-10 20:01:54  No: 120160

すみません、こちら↓ではなかなか解がみつからなさそうだったので
http://www.ailight.jp/BBS/Detail.aspx?Header_ID=1409
こっちの掲示板にも聞いてみました。(急いで解決せねばならぬので、、、)


suisuisui  2005-03-11 19:17:59  No: 120161

http://www.ailight.jp/BBS/Detail.aspx?Header_ID=1409
で解決。


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加