none
xmlwriter 可以 插入一筆資料嗎? RRS feed

  • 問題

  • 各位前輩好,小弟有爬文看了余小章的XML檔案操作,只是有看到 xmlwriter Or xmltextwriter 效率更好,不過都查到是開啟檔案的,這兩個類可以插入一筆資料嗎?

        Public Function WriteToXML(ByVal filename As String, ByVal list As ListDictionary)
            Try
                If File.Exists(filename) Then
                    Dim doc As New XmlDocument
                    doc.Load(filename)
                    Dim node As XmlNode = doc.SelectSingleNode("NewDataSet")
                    If (node Is Nothing) Then
                        Return 2
                    End If

                    Dim mydata As XmlElement = doc.CreateElement("Table")
                    node.AppendChild(mydata)
                    For i = 0 To list.Count - 1
                        Dim sub1 As XmlElement = doc.CreateElement(list.Keys(i))
                        sub1.InnerText = list.Values(i)
                        mydata.AppendChild(sub1)
                    Next

                    doc.Save(filename)

                Else
                    Dim myXmlTextWriter As New XmlTextWriter(filename, Nothing)

                    With myXmlTextWriter
                        .Formatting = Formatting.Indented  '每行迴車

                        .WriteStartElement("NewDataSet")
                        .WriteStartElement("Table")

                        For i = 0 To list.Count - 1
                            .WriteElementString(list.Keys(i), list.Values(i))

                        Next
                        .WriteEndElement()
                        .WriteEndElement()
                        .Close()
                    End With
                    'Using writer As XmlWriter = XmlWriter.Create(filename)

                    '    'Dim settings As XmlWriterSettings = New XmlWriterSettings()
                    '    'settings.Indent = True
                    '    'settings.IndentChars = (ControlChars.CrLf)
                    '    'settings.OmitXmlDeclaration = True

                    '    'writer.Settings.Indent = True
                    '    'writer.Settings.NewLineChars = vbCrLf

                    '    'writer.WriteWhitespace(vbCrLf)
                    '    writer.WriteStartElement("NewDataset")
                    '    'writer.WriteWhitespace(vbCrLf)
                    '    writer.WriteStartElement("Datatable")
                    '    'writer.WriteWhitespace(vbCrLf)

                    '    'writer.WriteStartElement("datatable")
                    '    'writer.WriteWhitespace(vbCrLf)


                    '    For i = 0 To list.Count - 1
                    '        writer.WriteElementString(list.Keys(i), list.Values(i))
                    '        'writer.WriteWhitespace(vbCrLf)
                    '    Next

                    '    'writer.WriteWhitespace(vbCrLf)
                    '    writer.WriteEndElement()
                    '    writer.WriteWhitespace(vbCrLf)
                    '    writer.WriteEndElement()
                    '    writer.Flush()

                    'End Using

                End If

                Return 0
            Catch ex As Exception
                Return 1
            End Try


        End Function



    每天都在複製貼上,什麼時候才能自己寫出來~~哎.....

    2012年12月11日 下午 05:25

解答

所有回覆

  • 不懂你的問題

    你的sample code 不就有 可以寫入資料的部份嗎?


    以下為簽名檔,如果你愛拉椅子坐那就是你的問題。
    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度

    2012年12月11日 下午 07:26
  • 您好,
    請問您指的是加入XML中的一個Element嗎?
    要透過「WriteStartElement」、「WriteEndElement」。

    還是要在dataTable中加入一筆Row?
    如果是資料的話,透過DataSet的操作會來的比較方便哦!

    如果您是要將DataSet的資料轉出成XML,就用DataSet.WriteXml
    Writing a DataSet as XML Data


    以上說明若有錯誤請指教,謝謝。
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/


    • 已編輯 亂馬客 2012年12月12日 上午 01:59
    2012年12月12日 上午 01:58
  • 不好意思,小弟沒說清楚,小弟就像亂馬客說的 

    希望透過 「WriteStartElement」、「WriteEndElement」來新增一筆資料

    不是透過 XmlDocument 是透過 xmlwriter or xmltextwriter

    因為小弟在寫PDA 直接用 dataset .write("xxx.xml") 超過500筆會很慢,

    在datatable 新增一筆資料(只是顯示) 然後再自己利用 xmlwriter(實際存檔) 插入一筆資料。

      不過讓小弟有點疑惑的是 因為 dataset.write("xxx.xml")這樣是畫面顯示什麼直接存檔不會問問題,只是速度慢。

       現在想改寫成

      1.datatable 增加 row

      2.然後 WriteToXML("xxx.xml", mylist) 

      3.如果再 Readxml ...這會變慢 (所以省略了這一段)

      雖然看起來功能一樣,不過總覺得 好像 如果 某一個地方有錯誤的話,畫面跟存檔就不一致了。

      

      

     



    每天都在複製貼上,什麼時候才能自己寫出來~~哎.....



    2012年12月12日 上午 02:53
  • 各位前輩不好意思請問一下,

    在Dataset.writexml()  是否可以取得修改過的列,

    然後只更新檔案內的部分內容 (新增的節點或是刪除節點)..

    因為Dataset.writexml實在是太慢了~~

    Dim doc As New XmlDocument
    doc.Load(filename) '可能太多筆資料 讀取速度有點慢,



    每天都在複製貼上,什麼時候才能自己寫出來~~哎.....

    2012年12月12日 上午 03:30
  • 您好,
    有考慮將資料放到SQLLite之中嗎?
    這樣就不需將全部的資料都存到file之中。

    以上說明若有錯誤請指教,謝謝。
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2012年12月12日 上午 04:48
  • 恩恩,小弟也是在想說沒辦法就真的要SQLite了,因為要修改外包的程式,都是用XML去做,結果 紀錄了300筆以上,讀檔(3秒鐘..ㄏㄏㄏ)..

    看樣子小弟真的要花時間去修改,電腦跟PDA的速度果然差很多,謝謝指導


    每天都在複製貼上,什麼時候才能自己寫出來~~哎.....

    2012年12月12日 上午 06:27