前几天我在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的最佳方式。
请帮忙
答案 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