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に値が入っていません。
なんでも良いのでアドバイス願います。
よろしくお願いいたします。
さて、どちらかで続けましょうね。
http://www.ailight.jp/BBS/Detail.aspx?Header_ID=1409
すみません、こちら↓ではなかなか解がみつからなさそうだったので
http://www.ailight.jp/BBS/Detail.aspx?Header_ID=1409
こっちの掲示板にも聞いてみました。(急いで解決せねばならぬので、、、)
http://www.ailight.jp/BBS/Detail.aspx?Header_ID=1409
で解決。
ツイート | ![]() |