你可以让VS做一个对应XML文件的类,然后你可以用那个类来获取数据,有时很简单。
我在表单上放了一个 DataGridView 并使用了这段代码:
Imports System.IO
Imports System.Xml
Imports System.Xml.Serialization
Public Class Form1
Class Project
Property Filename As String
Property Description As String
End Class
Private Sub LoadData()
Dim xmlFile = "C:\temp\projectlist.xml"
Dim projectsData As Projects.menu
Dim serializer = New XmlSerializer(GetType(Projects.menu))
Using fs As New FileStream(xmlFile, FileMode.Open, FileAccess.Read, FileShare.Read)
Using rdr = XmlReader.Create(fs)
projectsData = DirectCast(serializer.Deserialize(rdr), Projects.menu)
End Using
End Using
Dim projectsList = projectsData.project.Select(Function(p) New Project With {.Filename = p.name, .Description = p.description}).ToList()
DataGridView1.DataSource = projectsList
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
LoadData()
DataGridView1.AutoResizeColumn(0)
DataGridView1.AutoResizeColumn(1)
End Sub
End Class
要得到这个:
请根据需要调整类和属性的名称。
当然,您需要类与 XML 文件一起使用。为此,请复制 XML 数据,然后在 Visual Studio 中选择“编辑”->“选择性粘贴”->“将 XML 粘贴为类”。我选择将它粘贴到一个名为“Projects”的类中并得到这个:
Public Class Projects
<System.SerializableAttribute(),
System.ComponentModel.DesignerCategoryAttribute("code"),
System.Xml.Serialization.XmlTypeAttribute(AnonymousType:=True),
System.Xml.Serialization.XmlRootAttribute([Namespace]:="", IsNullable:=False)>
Partial Public Class menu
Private headerField As menuHeader
Private projectField() As menuProject
'''<remarks/>
Public Property header() As menuHeader
Get
Return Me.headerField
End Get
Set
Me.headerField = Value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlElementAttribute("project")>
Public Property project() As menuProject()
Get
Return Me.projectField
End Get
Set
Me.projectField = Value
End Set
End Property
End Class
'''<remarks/>
<System.SerializableAttribute(),
System.ComponentModel.DesignerCategoryAttribute("code"),
System.Xml.Serialization.XmlTypeAttribute(AnonymousType:=True)>
Partial Public Class menuHeader
Private listnameField As String
Private lastlistupdateField As String
'''<remarks/>
Public Property listname() As String
Get
Return Me.listnameField
End Get
Set
Me.listnameField = Value
End Set
End Property
'''<remarks/>
Public Property lastlistupdate() As String
Get
Return Me.lastlistupdateField
End Get
Set
Me.lastlistupdateField = Value
End Set
End Property
End Class
'''<remarks/>
<System.SerializableAttribute(),
System.ComponentModel.DesignerCategoryAttribute("code"),
System.Xml.Serialization.XmlTypeAttribute(AnonymousType:=True)>
Partial Public Class menuProject
Private descriptionField As String
Private monthField As String
Private nameField As String
Private indexField As Boolean
Private imageField As String
'''<remarks/>
Public Property description() As String
Get
Return Me.descriptionField
End Get
Set
Me.descriptionField = Value
End Set
End Property
'''<remarks/>
Public Property month() As String
Get
Return Me.monthField
End Get
Set
Me.monthField = Value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlAttributeAttribute()>
Public Property name() As String
Get
Return Me.nameField
End Get
Set
Me.nameField = Value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlAttributeAttribute()>
Public Property index() As Boolean
Get
Return Me.indexField
End Get
Set
Me.indexField = Value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlAttributeAttribute()>
Public Property image() As String
Get
Return Me.imageField
End Get
Set
Me.imageField = Value
End Set
End Property
End Class
End Class
附:我将编码放在 XML 文件的声明中:<?xml version="1.0" encoding="utf-8" ?>。