• 締切済み

VB.NETでXMLのデータをやり取りする方法

VB.NET 2003を使用して、Windowsソフトを開発しています。 データの保存にXMLを使用したいのですが、読み出せるのですが書き込めません。 どのような方法でもいいので、既存XMLファイルにデータを追加する方法をご教授願えませんか? また、ご存知であればでよいのですが、VB.NETでWindowsソフト開発で、XMLに関する解説が詳しく掲載されているサイトはありませんか?

みんなの回答

回答No.5

こんな感じです。 Module Module1   Sub Main()     Dim l_strPath As String = "C:\Text.xml"     Dim l_dstデータセット As DataSet     Dim l_encエンコーディング As System.Text.Encoding = System.Text.Encoding.GetEncoding(932)     'データセットを書く     'http://okwave.jp/kotaeru.php3?q=1583980     l_dstデータセット = 作成_データセット()     'データセットを出力     Call XML_書(l_dstデータセット, l_strPath)     'データセットを初期化     l_dstデータセット = New DataSet()     'データセットを読込     Call XML_読(l_dstデータセット, l_strPath)   End Sub   Sub XML_書(ByVal p_dstデータ As DataSet, ByVal p_strファイル As String)     Dim l_str出力フォルダ As String = IO.Path.GetDirectoryName(p_strファイル)     '出力実行     Dim l_swXML As New IO.StreamWriter(p_strファイル)     p_dstデータ.WriteXml(l_swXML, XmlWriteMode.WriteSchema)     l_swXML.Close()     l_swXML = Nothing   End Sub   Sub XML_読(ByRef p_dstデータ As DataSet, ByVal p_strファイル As String)     '読込実行     Dim l_swXML As New IO.StreamReader(p_strファイル)     Dim l_xrdXML As New Xml.XmlTextReader(l_swXML)     p_dstデータ.ReadXml(l_xrdXML)     l_xrdXML.Close()     l_swXML.Close()     l_swXML = Nothing   End Sub   Function 作成_データセット() As DataSet     Dim l_dtbデータテーブル As New DataTable("新テーブル")     Dim l_drwデータロウ As DataRow     Dim i As Integer     Dim l_dstデータセット As New DataSet()     l_dtbデータテーブル.Columns.Add("文字型", System.Type.GetType("System.String"))     l_dtbデータテーブル.Columns.Add("整数型", System.Type.GetType("System.Int32"))     l_dtbデータテーブル.Columns.Add("長整数型", System.Type.GetType("System.Int64"))     For i = 1 To 26       l_drwデータロウ = l_dtbデータテーブル.NewRow       l_drwデータロウ.Item("文字型") = Chr(48 + i) & Chr(64 + i)       l_drwデータロウ.Item("整数型") = i * 1000       l_drwデータロウ.Item("長整数型") = i * 1000000       l_dtbデータテーブル.Rows.Add(l_drwデータロウ)     Next     l_dstデータセット.Tables.Add(l_dtbデータテーブル)     Return l_dstデータセット   End Function End Module

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

例えば、ファイルが使用中で同じ名前で書き込みできないということなら、最初にファイルをコピーして、そちらを使用するようにしたらどうでしょう。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

>クローズする方法 StreamReaderだったら Close ですが、ぼけた回答だったらすみません。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

>このファイルは別のプロセスが使用中です。 ファイルが、開かれたままになっているということですね。

you_ser
質問者

補足

ファイルが開きっぱなしってことはわかるのですが、クローズする方法がわからないんです。 あと、XMLでのデータの取り扱いがこれで本当によいのかどうかもわからない状態です。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

Imports System.Xml して XmlDocumentで Loadして 適当にいじって Saveで書き出せます そういうことではなくて、書き込めないという別の理由なら、 こういうXMLデータファイルをこういうやり方で読み込んだ そして、こういう処理をして、 こういうやり方でファイルに書き込もうとしたが こういう風に失敗するというように もう少し詳しく書いて下さい

you_ser
質問者

補足

説明不足で申し訳ありませんでした。 XMLデータをStreamReaderで読み出し、DataSetとして使用します。 DataSet(正確にはDataTable)に対してデータ追加を行い、データの加工が終わったDataSetをStreamWriterを利用して書き込む際に以下のエラーが出ます。 'System.IO.IOException' のハンドルされていない例外が mscorlib.dll で発生しました。 追加情報 : プロセスはファイル "XXXX.xml" にアクセスできません。このファイルは別のプロセスが使用中です。