我正在尝试解析REST Web服务的XML输出,并指出了使用Linq2Xml查询XML以获取我所追求的属性的方向。 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>
我想在一个数据表中返回ZoneID,ZoneName和ZoneGUID,我希望函数返回类似的内容:
id name guid
0 westralia {81C56183-31DA-45C2-90C3-81609F01B38B}
10001 lounge {eac0109e-0090-a992-7fba-dc67fe29e6e7}
我一直在研究以下函数来查询XML,并且已经尝试返回结果(甚至在试图操纵数据以使其进入我想要的格式时)。
Private Function getServerResponse_Linq(ByVal queryString As Uri) As DataTable
Dim dt As DataTable = New DataTable("data")
With dt
.Columns.Add("name")
.Columns.Add("Value")
End With
Dim loaded As XDocument = XDocument.Load(queryString.ToString)
Dim dr As DataRow
Dim query = From c In loaded.<Response> Select c
For Each result In query
dr = dt.NewRow
With dr
.Item("name") = result.@name
.Item("value") = result.Value
End With
Next
Return dt
End Function
返回的数据表为空,我已确认结果确实已分配XML,而result.value是XML文件的字符串版本(200Westralia0 {81C56183-31DA-45C2-90C3-81609F01B38B} Lounge10001 {eac0109e-0090 -a992-7fba-dc67fe29e6e7})
是否有人能够提供有关我如何从名称(ZoneName%)和属性值(Westralia和Lounge)上方的REST XML示例中读取的帮助?
答案 0 :(得分:1)
我可以在您的代码段中看到三个问题。首先,而不是
Dim query = From c In loaded.<Response> Select c
你需要
Dim query = From c In loaded.<Response>.Elements Select c
甚至只是
Dim query = loaded.<Response>.Elements
获取Items而不是Response。
此外,您还需要添加
dt.Rows.Add(dr)
到你的循环,否则你的新行不会被添加到DataTable。
最后,XML区分大小写,因此您需要使用@Name
,而不是@name
。