2012-04-14 79 views
0

我遇到了一些我的項目的麻煩。它是使用VB.net的windows mobile 5的基本財務經理。一切正常,但是,當一個值保存在xml中時,保存另一個值時將被覆蓋。我希望它添加這些值,而不是完全覆蓋它們。將值添加到XML而不是覆蓋它(XML + VB.NET)

我的代碼:

Private Sub MenuItem3_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem3.Click 
    Dim writer As New XmlTextWriter("product.xml", Nothing) 
    writer.WriteStartDocument(True) 
    writer.Formatting = Formatting.Indented 
    writer.Indentation = 2 
    writer.WriteStartElement("Table") 
    createNode(DateTimePicker.Text, Subject.Text, Category.Text, Amount.Text, PaymentLabel.Text, writer) 
    writer.WriteEndElement() 
    writer.WriteEndDocument() 
    writer.Close() 
End Sub 
Private Sub createNode(ByVal eDate As String, ByVal eSubject As String, ByVal eCategory As String, ByVal eAmount As String, ByVal ePayment As String, ByVal writer As XmlTextWriter) 
    writer.WriteStartElement("Expenses") 
    writer.WriteStartElement("Date") 
    writer.WriteString(eDate) 
    writer.WriteEndElement() 
    writer.WriteStartElement("Subject") 
    writer.WriteString(eSubject) 
    writer.WriteEndElement() 
    writer.WriteStartElement("Category") 
    writer.WriteString(eCategory) 
    writer.WriteEndElement() 
    writer.WriteStartElement("Amount") 
    writer.WriteString(eAmount) 
    writer.WriteEndElement() 
    writer.WriteStartElement("Payment") 
    writer.WriteString(ePayment) 
    writer.WriteEndDocument() 
End Sub 

回答

0

你有XmlTextReaderXmlTextWriter,最重要的是,XmlDocumentXmlElement多的工作。

XmlDocument工作,你會被操縱使用Document Object Model,文檔,它允許你刪除,插入和追加XML節點等

this link一些指點讀/寫XML這種方式。 有關如何操作文檔,請參閱關於XmlDocumentSystem.Xml命名空間的官方文​​檔。

+0

謝謝Torious。有沒有不同的方法呢?我對vb.net很陌生,這是爲了完成我的課程項目。 XML不是主題,但我想在網格視圖中顯示數據,因爲數據在列表框中列出時,我們無法水平滾動。 – 2012-04-14 03:58:12

+0

是的,您可能也可以使用XmlTextReader來讀取元素,並使用XmlTextWriter立即寫出它們,並且當您使用Table元素時,插入新的元素等等。但我真的推薦使用DOM;這並不難,真的! :) – Torious 2012-04-14 05:11:47

+0

我明白了。我只是不知道從哪裏開始,如果我要使用DOM。我在網上嘗試了以下教程,但都沒有成功。也許是因爲它們是針對windows的vb.net,而我正在嘗試它用於windows mobile。這也許是爲什麼我仍然堅持。 – 2012-04-14 07:09:59

0

好的,這樣的事情呢?

Private Sub MenuItem3_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem3.Click 

    Dim doc as New XmlDocument() 
    doc.LoadXml("product.xml") 

    Dim root as XmlNode = doc.DocumentElement 
    Dim list as XmlNodeList = root.SelectNodes("Table") 
    Dim table as XmlNode = list.Item(0) 

    table.AppendChild(createNode(doc, ... , ...)) 

    Dim writer As New XmlTextWriter(Console.Out) 
    writer.Formatting = Formatting.Indented 
    doc.WriteTo(writer) 
    writer.Flush() 

End Sub 

Function createNode(XmlDocument doc, ByVal eDate As String, ByVal eSubject As String, ByVal eCategory As String, ByVal eAmount As String, ByVal ePayment As String, ByVal writer As XmlTextWriter) As XmlNode 

    Dim element as XmlElement = doc.CreateElement("Expenses") 

    Dim dateElement as XmlElement = doc.CreateElement("Date") 
    dateElement.InnerText = eDate 
    element.AppendChild(dateElement) 

    ... similar code for the other sub-elements ... 

    Return element 

End Function