Я работаю над приложением .NET 3.5 Windows Forms, которое будет взаимодействовать с веб-службой REST, которая выводит XML-файл, например:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<Response Status="OK">
<Item Name="NumberZones">2</Item>
<Item Name="CurrentZoneID">10001</Item>
<Item Name="CurrentZoneIndex">1</Item>
<Item Name="ZoneName0">Westralia</Item>
<Item Name="ZoneID0">0</Item>
<Item Name="ZoneGUID0">{81C56183-31DA-45C2-90C3-81609F01B38B}</Item>
<Item Name="ZoneName1">Lounge</Item>
<Item Name="ZoneID1">10001</Item>
<Item Name="ZoneGUID1">{eac0109e-0090-a992-7fba-dc67fe29e6e7}</Item>
</Response>
Мне нужна помощь, как мне разобрать этот файл, чтобы я мог получить значение имени элемента (например, ZoneName0) и значение атрибута (в данном случае Westralia).
Я играл с использованием xDocument для синтаксического анализа XML-документа и смог это сделать, однако он очень медленный, что мне кажется, потому что я перебираю XML-документ и пытаюсь сопоставить имя элемента: *
Public Function getZoneDetails(ByVal serverName As String, ByVal serverPort As String) As DataTable
Dim sResult As DataTable
sResult = New DataTable("ZoneDetails")
With sResult
.Columns.Add("column")
.Columns.Add("data")
.Columns.Add("zoneID")
.Columns.Add("result")
End With
xmlDocPath = "temp.xml"
If Not DownloadXml(serverName, serverPort, "Playback/Zones", xmlDocPath) Then
Dim fDtRow As DataRow = sResult.NewRow()
fDtRow.Item(0) = ""
fDtRow.Item(1) = ""
fDtRow.Item(2) = ""
fDtRow.Item(3) = "Error downloading XML"
sResult.Rows.Add(fDtRow)
Return sResult
End If
If Not LoadXml(xmlDocPath) Then
Dim fDtRow As DataRow = sResult.NewRow()
fDtRow.Item(0) = ""
fDtRow.Item(1) = ""
fDtRow.Item(2) = ""
fDtRow.Item(3) = "Error loading XML internally"
sResult.Rows.Add(fDtRow)
Return sResult
End If
Try
' Make sure <status> = OK
Dim status As String = xdoc.Root.Attribute("Status").Value
If status <> "OK" Then
Dim fDtRow As DataRow = sResult.NewRow()
fDtRow.Item(0) = ""
fDtRow.Item(1) = ""
fDtRow.Item(2) = ""
fDtRow.Item(3) = "No route can be mapped out"
sResult.Rows.Add(fDtRow)
Return sResult
End If
Dim zoneID As String = String.Empty
Dim i As Integer = 0
For Each obj In xdoc.Root.Elements("Item").Attributes("Name")
Dim nRow As DataRow = sResult.NewRow()
If obj.Value = "ZoneID" + i.ToString Then
zoneID = obj.Parent.Value
nRow.Item(0) = "ZoneID"
nRow.Item(1) = zoneID
nRow.Item(2) = zoneID
nRow.Item(3) = "OK"
End If
If obj.Value = "ZoneName" + i.ToString Then
nRow.Item(0) = "ZoneName"
nRow.Item(1) = obj.Parent.Value
nRow.Item(2) = zoneID
nRow.Item(3) = "OK"
End If
If obj.Value = "ZoneGUID" + i.ToString Then
nRow.Item(0) = "ZoneGUID"
nRow.Item(1) = obj.Parent.Value
nRow.Item(2) = zoneID
nRow.Item(3) = "OK"
End If
i = i + 1
sResult.Rows.Add(nRow)
Next
Return sResult
Catch ex As Exception
Dim fDtRow As DataRow = sResult.NewRow()
fDtRow.Item(0) = ""
fDtRow.Item(1) = ""
fDtRow.Item(2) = ""
fDtRow.Item(3) = "Error occured"
sResult.Rows.Add(fDtRow)
Return sResult
End Try
End Function
Я хочу прочитать XML, назначить атрибуты и имена атрибутов в набор данных, который будет связан с выпадающим списком.
Может кто-нибудь посоветовать, если есть лучший метод, делающий то, чего я хочу достичь? Я стремлюсь к лучшему решению.
Если есть какие-либо вопросы, пожалуйста, не стесняйтесь, дайте мне знать.