将值添加到XML而不是覆盖它(XML + VB.NET)

时间:2012-04-14 03:32:14

标签: xml windows vb.net windows-mobile

我的一个项目遇到了一些麻烦。它是使用VB.net的Windows Mobile 5的基本财务经理。一切正常,但是,当一个值保存在xml中时,它将在另一个保存时被覆盖。我希望它添加这些值而不是完全覆盖它们。

我的代码:

    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

2 个答案:

答案 0 :(得分:0)

您必须使用XmlTextReaderXmlTextWriter,最重要的是,XmlDocumentXmlElement等。

使用XmlDocument,您将使用Document Object Model操作文档,这允许您删除,插入和追加XML节点等。

有关使用这种方式读/写XML的一些指示,请参阅this link。 有关如何操作文档的信息,请参阅XmlDocumentSystem.Xml命名空间的官方文​​档。

答案 1 :(得分: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