Linq2Xml Parse Вывод из веб-сервиса REST - PullRequest
0 голосов
/ 03 января 2011

Я пытаюсь проанализировать вывод XML из веб-службы REST, и мне было указано, как использовать 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})

Может ли кто-нибудь оказать помощь в том, как я могу прочитать из примера REST XML над именем (ZoneName%) и значением атрибута (Westralia and Lounge)?

1 Ответ

1 голос
/ 03 января 2011

В вашем фрагменте кода я вижу три проблемы. Во-первых, вместо

    Dim query = From c In loaded.<Response> Select c

вам нужно

    Dim query = From c In loaded.<Response>.Elements Select c

или даже просто

    Dim query = loaded.<Response>.Elements

для получения предметов, а не ответа.

Также вам нужно добавить

    dt.Rows.Add(dr)

в ваш цикл, иначе ваша новая строка не будет добавлена ​​в DataTable.

Наконец, XML чувствителен к регистру, поэтому вам нужно использовать @Name, а не @name.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...