您可以使用XmlSerializer(創建/讀取XML文件)
對於這一點,你需要定義XmlRoot
,而且應該在XML中使用的節點(公共屬性)
然後,您可以定義它們是否應該是元素,文本,屬性,數組,...
然後可以將列表(前綴)附加到ListBox的DataSource/ItemsSource上(具體取決於您是否需要wpf或winforms或asp.net)
<XmlRoot("OrbitSettings")>
Public Class OrbitSettings
<XmlElement("Prefixes")>
Public Property Prefixes As List(Of Prefix)
Public Sub New()
End Sub
End Class
Public Class Prefix
<XmlAttribute()>
Public Property Label As String
<XmlText>
Public Property Value As String
End Class
保存/創建XML文件
Function GetOrbitSettings(myStream As Stream) As OrbitSettings
Dim serializer As New XmlSerializer(GetType(OrbitSettings))
Dim orbitSetting As OrbitSettings = Nothing
Try
orbitSetting = DirectCast(serializer.Deserialize(myStream), OrbitSettings)
Catch ex As Exception
System.Diagnostics.Debug.WriteLine(ex.Message + "\r\n" + ex.StackTrace)
orbitSetting = New OrbitSettings() With {.Prefixes = New List(Of Prefix)}
End Try
Return orbitSetting
End Function
Function GetOrbitSettings(filename As String) As OrbitSettings
If File.Exists(filename) Then
Dim settings As OrbitSettings = Nothing
Using fileStream As New FileStream(filename, FileMode.Open, FileAccess.Read)
settings = GetOrbitSettings(New FileStream(filename, FileMode.Open, FileAccess.Read))
End Using
If settings IsNot Nothing Then
Return settings
End If
End If
Return New OrbitSettings() With {.Prefixes = New List(Of Prefix)}
End Function
Function SaveOrbitSettings(myStream As Stream, settings As OrbitSettings) As Boolean
Dim succeeded As Boolean = False
Try
Dim serializer As New XmlSerializer(GetType(OrbitSettings))
serializer.Serialize(myStream, settings)
succeeded = True
Catch ex As Exception
System.Diagnostics.Debug.WriteLine(ex.Message + "\r\n" + ex.StackTrace)
End Try
Return succeeded
End Function
Function SaveOrbitSettings(filename As String, settings As OrbitSettings) As Boolean
Dim succeeded As Boolean = True
Try
Using Str As Stream = New FileStream(filename, FileMode.Create, FileAccess.Write)
succeeded = SaveOrbitSettings(Str, settings)
End Using
Catch ex As Exception
System.Diagnostics.Debug.WriteLine(ex.Message + "\r\n" + ex.StackTrace)
succeeded = False
End Try
Return succeeded
End Function
和一個小主程序作爲一個例子
Sub Main()
Dim settings As New OrbitSettings With {.Prefixes = New List(Of Prefix)()}
Dim filename As String = Environment.CurrentDirectory + "\prefixes.xml"
settings.Prefixes.Add(New Prefix With {.Label = "Mr", .Value = "Mister"})
settings.Prefixes.Add(New Prefix With {.Label = "Ms", .Value = "Miss"})
settings.Prefixes.Add(New Prefix With {.Label = "Mss", .Value = "Misses"})
SaveOrbitSettings(filename, settings)
settings = GetOrbitSettings(filename)
For Each prf As Prefix In settings.Prefixes
Console.WriteLine("Found {0}: {1}", prf.Label, prf.Value)
Next
Console.ReadLine()
End Sub
然後將給予
<?xml version="1.0"?>
<OrbitSettings xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Prefixes Label="Mr">Mister</Prefixes>
<Prefixes Label="Ms">Miss</Prefixes>
<Prefixes Label="Mss">Misses</Prefixes>
</OrbitSettings>
輸出你想使用XmlSerializer或XmlReader?你能證明你碰到了什麼嗎? – Icepickle