VB.net XML读写

时间:2018-06-17 19:18:43

标签: xml vb.net

前几天我在StackOverflow上询问了如何阅读XML数据。

我得到了一个很好的答案,但我还有一个问题。

这是我的TXT文件中的XML代码:

<DataBase1>
<Info LastRow="7" />
<Row ID="1" Voornaam="Thomas" Achternaam="Ditto" Telefoon="04764" />
<Row ID="2" Voornaam="Bart" Achternaam="Soetens" Telefoon="123456" />
<Row ID="3" Voornaam="Koen" Achternaam="Baetens" Telefoon="789123" />
<Row ID="4" Voornaam="Ina" Achternaam="DV" Telefoon="147258" />
<Row ID="5" Voornaam="Saar" Achternaam="VDB" Telefoon="852369" />
<Row ID="6" Voornaam="erwin" Achternaam="vanden" Telefoon="111111" />
<Row ID="7" Voornaam="lol" Achternaam="broek" Telefoon="000111" />
</DataBase1>
<DataBase2>
<Info LastRow="7">
    <Lastupdated Date="20180617" ID="1" />
    <Lastupdated Date="20180607" ID="2" />
    <Lastupdated Date="20180613" ID="3" />
    <Lastupdated Date="20180613" ID="4" />
    <Lastupdated Date="20180611" ID="5" />
    <Lastupdated Date="20180601" ID="6" />
    <Lastupdated Date="20180605" ID="7" />
</Info>
<Row ID="1" Job="Programmer" />
<Row ID="2" Job="Constructor" />
<Row ID="3" Job="Teacher" />
<Row ID="4" Job="Cop" />
<Row ID="5" Job="Pimp" />
<Row ID="6" Job="No job" />
<Row ID="7" Job="Swimmer" />
</DataBase2>

我可以使用这个VB.net代码阅读所有内容:

If File.Exists("c:/CPS/VB-XML.txt") Then
            Dim x = XElement.Load("c:/CPS/E-Journal.txt")
            LastRow = x.<Info>.@LastRow
            Dim ele As IEnumerable(Of XElement) = x.Descendants("Row")

            For Each RStatus As XElement In ele
                DataGridView1.Rows.Add(RStatus.Attribute("ID").Value,
                                       RStatus.Attribute("Voornaam").Value,
                                       RStatus.Attribute("Achternaam").Value,
                                       RStatus.Attribute("Telefoon").Value)

            Next

        Else
            File.Create("c:/CPS/VB-XML.txt")
        End If

这是问题/问题1:VB.net脚本中的X从Database1读取数据但是如何从Database2读取数据。有人能帮助我吗?

问题2:如何在Database1和/或Database2中添加行,以及如何在Info部分中添加Lastupdated记录,并将其再次保存在我的txt文件中。

问题3:如何根据ID编辑信息。

我知道很多可能不是阅读/处理XML的最佳方式。

请帮忙

1 个答案:

答案 0 :(得分:0)

这是一个更通用的xml解析,它将数据放入一个数据集中,每个数据库都有一个表。

Imports System.Xml
Imports System.Xml.Linq
Imports System.Data

Module Module1

    Const FILENAME As String = "c:\temp\test.xml"
    Sub Main()
        Dim doc As XDocument = XDocument.Load(FILENAME)

        Dim databases As List(Of XElement) = doc.Descendants().Where(Function(x) x.Name.LocalName.StartsWith("DataBase")).ToList()

        Dim ds As New DataSet()

        For Each database As XElement In databases
            Dim newTable As New DataTable(database.Name.LocalName)
            ds.Tables.Add(newTable)
            Dim first As Boolean = True

            For Each row As XElement In database.Descendants("Row")
                If first = True Then
                    first = False

                    For Each Attribute In row.Attributes()
                        newTable.Columns.Add(Attribute.Name.LocalName, GetType(String))
                    Next
                End If
                Dim newRow As DataRow = newTable.Rows.Add()
                For Each Attribute In row.Attributes()
                    newRow(Attribute.Name.LocalName) = Attribute.Value
                Next
            Next
        Next

    End Sub

End Module