datasetの内容をxmlに出力するのにはたった一行、writexmlという関数を使うだけでできあがる模様。あいたたた。datagridにバインドされたデータを一生懸命xml化するためにコードを考えていたのが馬鹿らしくなった。datasetの内容をxmlに変換できるというのは知らないとわからないけれど、xmlデータをdatagridにバインドできるのを知ってたのに逆を想像できなかったのが鈍すぎる。
datasetをxmlファイルに出力するサンプルコード(スマートな方法)
'datasetを作成するための素材
Dim cn As New OleDb.OleDbConnection("データベース接続文字列")
Dim da As OleDb.OleDbDataAdapter
Dim ds As DataSet
'datasetにsqlの結果のテーブルをセット
ds = New DataSet("家計簿")
da = New OleDb.OleDbDataAdapter("SELECT * FROM 収支", cn)
da.Fill(ds, "家計簿")
'datasetにセットされたテーブルをxmlファイル出力
ds.WriteXml("./data/account.xml")
'datasetの解放
da.Dispose()
ds.Dispose()
datasetをxmlファイルに出力するサンプルコード(悪い見本)
'datasetを作成するための素材
Dim cn As New OleDb.OleDbConnection("データベース接続文字列")
Dim da As OleDb.OleDbDataAdapter
Dim ds As DataSet
ds = New DataSet("家計簿")
da = New OleDb.OleDbDataAdapter(SELECT * FROM 収支, cn)
da.Fill(ds, "家計簿")
'xmlドキュメントの宣言
Dim xmlDoc As New System.Xml.XmlDocument
'XML宣言
Dim xmlDecl As System.Xml.XmlDeclaration = xmlDoc.CreateXmlDeclaration("1.0", "UTF-8", Nothing)
'宣言を子要素として追加
xmlDoc.AppendChild(xmlDecl)
'ルート要素の作成
Dim rootEle As System.Xml.XmlElement = xmlDoc.CreateElement("家計簿データ")
'データグリッドのレコード件数をセット
Dim records As Integer
Dim i As Integer
records = ds.Tables(0).Rows.Count
i = ds.Tables(0).Rows.Count
'家計簿のレコードの各要素の宣言
Dim recordElements(i) As XmlElement
Dim idEle(i) As XmlElement
Dim dateEle(i) As XmlElement
Dim catEle(i) As XmlElement
Dim detEle(i) As XmlElement
Dim accEle(i) As XmlElement
Dim moneyEle(i) As XmlElement
Dim comEle(i) As XmlElement
'datasetのテーブルからレコードの各値を取り出してノードを作成。レコード件数分ループ。
For i = 0 To (records - 1)
recordElements(i) = xmlDoc.CreateElement("レコード")
dateEle(i) = xmlDoc.CreateElement("入力日")
dateEle(i).InnerText = ds.Tables(0).Rows(i).Item(0).ToString
catEle(i) = xmlDoc.CreateElement("費目")
catEle(i).InnerText = ds.Tables(0).Rows(i).Item(1).ToString
detEle(i) = xmlDoc.CreateElement("内訳")
detEle(i).InnerText = ds.Tables(0).Rows(i).Item(2).ToString
accEle(i) = xmlDoc.CreateElement("口座名称")
accEle(i).InnerText = ds.Tables(0).Rows(i).Item(3).ToString
moneyEle(i) = xmlDoc.CreateElement("収支")
moneyEle(i).InnerText = ds.Tables(0).Rows(i).Item(4).ToString
comEle(i) = xmlDoc.CreateElement("備考")
comEle(i).InnerText = ds.Tables(0).Rows(i).Item(5).ToString
idEle(i) = xmlDoc.CreateElement("id")
idEle(i).InnerText = ds.Tables(0).Rows(i).Item(6).ToString
recordElements(i).AppendChild(dateEle(i))
recordElements(i).AppendChild(catEle(i))
recordElements(i).AppendChild(detEle(i))
recordElements(i).AppendChild(accEle(i))
recordElements(i).AppendChild(moneyEle(i))
recordElements(i).AppendChild(comEle(i))
recordElements(i).AppendChild(idEle(i))
rootEle.AppendChild(recordElements(i))
Next i
'作成したルート要素をxmlDocの子要素として追加
xmlDoc.AppendChild(rootEle)
'作成したDOMドキュメントをファイルに保存
xmlDoc.Save("./data/account.xml")
'datasetの解放
da.Dispose()
ds.Dispose()
・・・こんなしんどいことをやろうとしてました(;´д` )