我必须阅读XML文档数据:
<root>
<cartype>Mercedes</cartype>
<production>2005</production>
<fuel>Diesel</fuel>
<color>Red</color>
<services>
<service>
<year>2006</year>
<km>47800</km>
<city>Stuttgart</city>
</service>
<service>
<year>2007</year>
<km>92125</km>
<city>FFM</city>
</service>
<service>
<km>180420</km>
<year>2009</year>
<city>Hannover</city>
</service>
</services>
<condition>Good</condition>
</root>
然后我这样读了:
Dim cartype As String
Dim fuel As String
Dim production As String
Dim color As String
Dim serviceyear() As String = {"", "", ""}
Dim servicekm() As String = {"", "", ""}
Dim sevicecity() As String = {"", "", ""}
Dim doc As XmlDocument = New XmlDocument()
doc.Load("mercedes.xml")
Dim root As XmlElement = doc.DocumentElement
Dim node As XmlNode = root.SelectSingleNode("production")
If Not node Is Nothing Then production = node.InnerText
node = root.SelectSingleNode("cartype")
If Not node Is Nothing Then cartype = node.InnerText
node = root.SelectSingleNode("fuel")
If Not node Is Nothing Then fuel = node.InnerText
node = root.SelectSingleNode("color")
If Not node Is Nothing Then color = node.InnerText
node = root.SelectSingleNode("services/service/year") '' first service year
If Not node Is Nothing Then serviceyear(0) = node.InnerText
node = root.SelectSingleNode("services/service/year") '' second service year
If Not node Is Nothing Then serviceyear(1) = node.InnerText
读取具有唯一元素名称的节点是可以的,但我不知道如何阅读所有&#34;服务&#34;在数组中,显示代码只读取第一个服务。服务可以是从0到未定义的数量。功能必须尽可能快,因为必须在尽可能短的时间内处理大量的xml。
答案 0 :(得分:2)
要阅读可变数量的<service>
元素,您需要使用SelectNodes
代替SelectSingleNode
:
Dim services = root.SelectNodes("services/service")
然后,您可以遍历<service>
个节点:
For Each service In services
If service("year") IsNot Nothing Then
Dim year = service("year").InnerText
End If
Next
就个人而言,我会使用LINQ to XML来解析文件(但这可能是因为我对LINQ的所有事情都很着迷!)。结合VB.NET对XML Literals的支持,它使得一些非常漂亮的代码(恕我直言)。
以下是您可以粘贴到LINQPad的完整示例。
Sub Main
' Use XElememt.Load(fileName) to load from file
Dim xml =
<root>
<cartype>Mercedes</cartype>
<production>2005</production>
<fuel>Diesel</fuel>
<color>Red</color>
<services>
<service>
<year>2006</year>
<km>47800</km>
<city>Stuttgart</city>
</service>
<service>
<year>2007</year>
<km>92125</km>
<city>FFM</city>
</service>
<service>
<km>180420</km>
<year>2009</year>
<city>Hannover</city>
</service>
</services>
<condition>Good</condition>
</root>
Dim history = New ServiceHistory() With {
.CarType = xml.<cartype>.Value,
.Production = xml.<production>.Value,
.Fuel = xml.<fuel>.Value,
.Color = xml.<color>.Value,
.Condition = xml.<condition>.Value,
.Services = (
From svc In xml.<services>.<service>
Select New Service() With {
.Year = svc.<year>.Value,
.KM = svc.<km>.Value,
.City = svc.<city>.Value
}
).ToList()
}
history.Dump()
End Sub
' Define other methods and classes here
Public Class ServiceHistory
Public Property CarType As String
Public Property Production As String
Public Property Fuel As String
Public Property Color As String
Public Property Condition As String
Public Property Services As List(Of Service)
End Class
Public Class Service
Public Property Year As String
Public Property KM As String
Public Property City As String
End Class
这为您提供以下内容:
答案 1 :(得分:0)
尝试使用linq,解析xml会更容易: 它必须是这样的:
xelement = XElement.Load(file);
services = xelement.Element("services").Elements("service");