- PR -

XMLファイルをDataSetに読み込んだ後にXML出力されない。

投稿者投稿内容
お獅子
大ベテラン
会議室デビュー日: 2004/09/14
投稿数: 160
投稿日時: 2006-09-20 10:36
いつもお世話になっております。

VB.NET(Windows)にて、XMLファイルをDataSetに読み込み、DataGridに表示させ、
その後、DataGrid(DataSet)の内容を読み込んだXMLに吐き出したいのですが、
特にエラーも出ず、出力もされません。

DataGridに直接手入力した場合は、正常に出力されます。

原因が何なのか解らず困っております。

どうぞ、ご伝授お願いします。

以下コードです。
-----------------------------------------------------------------
'XMLファイルを読み込み、DataSetにセットし、DataGridに表示します。
'問題なく表示はされます。

  Private Sub cmd1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd1.Click
    Dim dr As DataRow
    Dim i As Integer
    Dim myArray() As String

    Select Case OpenFileDialog1.ShowDialog()
      Case System.Windows.Forms.DialogResult.OK
          'ローカルのファイル情報
          Dim LocalFile As New System.IO.FileInfo(OpenFileDialog1.FileName)

          ' StreamReader の新しいインスタンスを生成する
          Dim hReader As New System.IO.StreamReader(LocalFile.FullName, System.Text.Encoding.Default)
          ' 読み込んだ結果を格納するための変数を宣言する
          Dim stResult As String = String.Empty

          ' 読み込みできる文字がなくなるまで繰り返す
          While (hReader.Peek() >= 0)
            ' ファイルを 1 行ずつ読み込む
            Dim stBuffer As String = hReader.ReadLine()
            ' 読み込んだものを分割
             myArray = Split(stBuffer, ",")

            dr = DV_Adres.Table.NewRow()
            dr("koumoku1") = myArray(0)
            dr("koumoku2") = myArray(1)
            dr("koumoku3") = myArray(2)
            DV_Adres.Table.Rows.Add(dr)
          End While

          '閉じる
          hReader.Close()
 
      End Select
   End Sub

'DataGridの内容をXMLファイルに出力します。
'読み込んだXMLが出力されない(手入力だけはOK)
  Private Sub cmdOut_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdOut.Click
    Dim SW As StreamWriter

    Me.Cursor = Cursors.WaitCursor

    Dim xmlSW As System.IO.StreamWriter = New System.IO.StreamWriter("xmlAdres.xml")
    DS_Adres1.WriteXml(xmlSW, XmlWriteMode.WriteSchema)
    xmlSW.Close()

    Me.Cursor = Cursors.Default

  End Sub

-----------------------------------------------------------------------------

[ メッセージ編集済み 編集者: お獅子 編集日時 2006-09-20 10:43 ]
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2006-09-20 11:06
ご自分で書かれているプログラムの内容がよくわかってないように見えるのですが。。。

まず、読み込んでいるのはXMLファイルではなくてCSVファイルですよね。
で、書き出すときにXmlWriteMode.WriteSchemaを指定しているので、XMLのスキーマ(構造)だけを
書き出そうとしています。
CSVファイルを読み込んだ状態だとXMLの構造はDataSetに生成されていないため、
スキーマとして書き出されるものがないのだと思います。
手入力のときはCSVからのデータを読み込んでおらず、DataSetで自動的に生成される
XMLのスキーマが出力されているのではないでしょうか。

どこかからコピーされたものか、他の人が書いたプログラムなんだろうと思いますが、
もうちょっと内容を読み取る努力をしたほうがよいと思います。
お獅子
大ベテラン
会議室デビュー日: 2004/09/14
投稿数: 160
投稿日時: 2006-09-20 12:08
あっ!

大変、大変、大変申し訳ありません。

質問の内容が間違っておりました。

読み込むのはXMLでは無くCSVファイルでした。

もう一度書き直します。



VB.NET(Windows)にて、CSVファイルをDataSetに読み込み、DataGridに表示させ、
その後、DataGrid(DataSet)の内容を読み込んだXMLに吐き出したいのですが、
特にエラーも出ず、出力もされません。

DataGridに直接手入力した場合は、正常に出力されます。

原因が何なのか解らず困っております。

どうぞ、ご伝授お願いします。

以下コードです。
-----------------------------------------------------------------
'CSVLファイルを読み込み、DataSetにセットし、DataGridに表示します。
'問題なく表示はされます。

  Private Sub cmd1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd1.Click
    Dim dr As DataRow
    Dim i As Integer
    Dim myArray() As String

    Select Case OpenFileDialog1.ShowDialog()
      Case System.Windows.Forms.DialogResult.OK
          'ローカルのファイル情報
          Dim LocalFile As New System.IO.FileInfo(OpenFileDialog1.FileName)

          ' StreamReader の新しいインスタンスを生成する
          Dim hReader As New System.IO.StreamReader(LocalFile.FullName, System.Text.Encoding.Default)
          ' 読み込んだ結果を格納するための変数を宣言する
          Dim stResult As String = String.Empty

          ' 読み込みできる文字がなくなるまで繰り返す
          While (hReader.Peek() >= 0)
            ' ファイルを 1 行ずつ読み込む
            Dim stBuffer As String = hReader.ReadLine()
            ' 読み込んだものを分割
             myArray = Split(stBuffer, ",")

            dr = DV_Adres.Table.NewRow()
            dr("koumoku1") = myArray(0)
            dr("koumoku2") = myArray(1)
            dr("koumoku3") = myArray(2)
            DV_Adres.Table.Rows.Add(dr)
          End While

          '閉じる
          hReader.Close()
 
      End Select
   End Sub

'DataGridの内容をXMLファイルに出力します。
'読み込んだXMLが出力されない(手入力だけはOK)
  Private Sub cmdOut_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdOut.Click
    Dim SW As StreamWriter

    Me.Cursor = Cursors.WaitCursor

    Dim xmlSW As System.IO.StreamWriter = New System.IO.StreamWriter("xmlAdres.xml")
    DS_Adres1.WriteXml(xmlSW, XmlWriteMode.WriteSchema)
    xmlSW.Close()

    Me.Cursor = Cursors.Default

  End Sub

-----------------------------------------------------------------------------

でした。

もう少し整理してから質問すべきでした。

以後、気を付けます。

で、ご伝授頂いた内容に戻らせていただきますが、
「CSVファイルを読み込んだ状態だとXMLの構造がDataSetに生成されない。」
と言う事なんですね。

なるほど。

結論から言うと、CSV⇒DataSet⇒XMLは無理と言う事になるんでしょうか。

その辺からもう一度調べてみます。

ありがとうございました。
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2006-09-20 12:30
で、なぜXmlWriteMode.WriteSchemaを使っているのでしょうか。
データをXMLに吐き出したいならXmlWriteMode.IgnoreSchemaあたりならできませんか?
Kazuki
ぬし
会議室デビュー日: 2004/10/13
投稿数: 298
投稿日時: 2006-09-20 12:54
DV_Adresって何型???
DataSetにはTableってプロパティ無いですし…
DataGridにもDataGridViewにも無いです。

独自型か何かですか?
それとも型指定されたDataSetです?

型指定されたDataSetなら、普通にDataSetにデータ追加できていれば
XMLにもデータを出力できるはずです。
お獅子
大ベテラン
会議室デビュー日: 2004/09/14
投稿数: 160
投稿日時: 2006-09-20 13:29
引用:

どっとねっとふぁんさんの書き込み (2006-09-20 12:30) より:
で、なぜXmlWriteMode.WriteSchemaを使っているのでしょうか。
データをXMLに吐き出したいならXmlWriteMode.IgnoreSchemaあたりならできませんか?




やってみたのですが、駄目でした。
新しい項目の追加でXMLスキーマを作ってデータセットを生成したので、スキーマが必要かと思ったのですが。

すみません。根本的に分かってないです。

何がやりたいかと言いますと、XMLファイルをデータベースの代わりとして使いたいのです。

引用:

DV_Adresって何型???
DataSetにはTableってプロパティ無いですし…
DataGridにもDataGridViewにも無いです。



DV_Adresは、先ほど言ったようにXMLスキーマから生成させたものです。
定義はデザイン上でやってます。

型指定はしてあります。

[ メッセージ編集済み 編集者: お獅子 編集日時 2006-09-20 13:30 ]
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2006-09-20 14:00
もしかして、独自のXMLスキーマを定義ずみで、それをDataSetに読み込ませて使いたいのでしょうか?
これはたぶんできません。
すくなくとも、DataSet.WriteXmlでそのようなXMLファイルを吐き出すことはできないはずです。
DataSetは自分なりのXMLスキーマの定義を持っていて、その形式しか受け付けなかったはず。
逆にいえば、その形式にのっとったXMLファイルを利用する分には簡単に使えます。

もし自分なりの形式でXMLファイルを作りたいなら間にXSLTでXMLの形式を変換する等の手間が要るでしょうね。
お獅子
大ベテラン
会議室デビュー日: 2004/09/14
投稿数: 160
投稿日時: 2006-09-20 14:24
引用:

どっとねっとふぁんさんの書き込み (2006-09-20 14:00) より:
もしかして、独自のXMLスキーマを定義ずみで、それをDataSetに読み込ませて使いたいのでしょうか?




そんな大それた事はしてません。既存のXMLスキーマです。


あの。原因が分かったのですが。怒らないで聞いてください。

CSVファイルを読み込む時にファイル選択用のダイアログを表示し、選択させているんですが、なんと、そこで選択したファイルのフォルダに出力されてました。

出力時にパスを指定しないと、EXEの有る場所に作成されるものだと思っていました。
お恥ずかしい限りです。

それで、常にEXEファイルのある場所にXMLファイルを置いておきたいのですが、パスを指定しる方法など有るのでしょうか?

よろしければ教えて頂けないでしょうか。

よろしくお願いします。

[ メッセージ編集済み 編集者: お獅子 編集日時 2006-09-20 14:25 ]

スキルアップ/キャリアアップ(JOB@IT)