クラスを使用してタイトル/値を保持し、XmlSerializer を使用して XML ファイルを読み書きする例を次に示します。クラスのインスタンスはリストに保持されます。
コードは次のとおりです。
Public Class Form1
<Serializable> _
Public Class TitleGroup
Public Title As String
Public Value1 As String
Public Value2 As String
Public Value3 As String
Public Value4 As String
Public Overrides Function ToString() As String
Return Title
End Function
End Class
Private TitleGroups As New List(Of TitleGroup)
Private DataFile As String = System.IO.Path.Combine(Application.StartupPath, "Data.xml")
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
LoadXmlData()
End Sub
Private Sub LoadXmlData()
If System.IO.File.Exists(DataFile) Then
Try
Dim xml As New System.Xml.Serialization.XmlSerializer(TitleGroups.GetType)
Using fs As New System.IO.FileStream(DataFile, IO.FileMode.Open, IO.FileAccess.Read)
TitleGroups = DirectCast(xml.Deserialize(fs), List(Of TitleGroup))
End Using
ComboBox1.DataSource = Nothing
ComboBox1.DataSource = TitleGroups
Catch ex As Exception
MessageBox.Show(ex.ToString, "Error Loading XML Data")
End Try
End If
End Sub
Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
If ComboBox1.SelectedIndex <> -1 Then
Dim TG As TitleGroup = ComboBox1.SelectedItem
Label1.Text = TG.Value1
Label2.Text = TG.Value2
Label3.Text = TG.Value3
Label4.Text = TG.Value4
End If
End Sub
Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
SaveXmlData()
End Sub
Private Sub SaveXmlData()
Try
Dim xml As New System.Xml.Serialization.XmlSerializer(TitleGroups.GetType)
Using fs As New System.IO.FileStream(DataFile, IO.FileMode.OpenOrCreate, IO.FileAccess.Write)
xml.Serialize(fs, TitleGroups)
End Using
Catch ex As Exception
MessageBox.Show(ex.ToString, "Error Saving XML Data")
End Try
End Sub
End Class
XML ファイルの例を次に示します。
<?xml version="1.0"?>
<ArrayOfTitleGroup xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<TitleGroup>
<Title>Pets</Title>
<Value1>Dog</Value1>
<Value2>Cat</Value2>
<Value3>Fish</Value3>
<Value4>Hamster</Value4>
</TitleGroup>
<TitleGroup>
<Title>Languages</Title>
<Value1>C#</Value1>
<Value2>VB.Net</Value2>
<Value3>Java</Value3>
<Value4>Objective-C</Value4>
</TitleGroup>
</ArrayOfTitleGroup>