[英]Looping XML in VB.net
我想做的是在XML文件(先生,夫人,博士...)中循環使用一堆前綴,然后將它們每個放入一個列表框,以便用戶可以單擊任意一個他們需要。
肯定有比這更簡單的方法:
<ObitSettings>
<Prefixes>
Mr.
</Prefixes>
<Prefixes>
Mrs.
</Prefixes>
<Prefixes>
Rev.
</Prefixes>
<Prefixes>
Fr.
</Prefixes>
<Prefixes>
......
我有另一種方式,每個前綴都有自己的節點:
<Prefixes>
<Mister>Mr.</Mister>
<Missus>Mrs.</Missus>
...
</Prefixes>
但這就是用長字符串給我所有內容,從而只在列表框中顯示項目。
我有點喜歡最后一種方式,因為它似乎更具描述性,因此,如果可能的話,我希望能夠編寫這樣的XML。 如果沒有,那么我將盡一切努力。
我同時使用了For Each ... Loops和For i ... Loops。 類似於從<Prefixes>
開始,然后查看第一個節點,獲取其文本,然后查看第二個節點,依此類推嗎?
您可以使用XmlSerializer(創建/讀取xml文件)
為此,您需要定義XmlRoot
以及Xml內部應使用的節點(公共屬性)
然后,您可以定義它們是否應為元素,文本,屬性,數組等。
然后,可以將List(Of Prefix)附加到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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.