Вы можете заставить 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
Чтобы получить это:
![enter image description here](https://i.stack.imgur.com/Hun4n.png)
При необходимости измените имена классов и свойств.
Конечно, вам нужен класс для работы с XML-файлом. Для этого скопируйте данные XML, а затем в Visual Studio выберите «Редактировать» -> «Специальная вставка» -> «Вставить XML как классы». Я решил вставить его в класс с именем «Проекты» и получил следующее:
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
P.S. Я поместил кодировку в объявление XML-файла: <?xml version="1.0" encoding="utf-8" ?>
.