2011-01-03 16 views
0

REST WebサービスからのXML出力を解析しようとしています.Lineq2Xmlを使用して、後にある属性をXMLに照会するように指示されています。次のようにXML出力は次のとおりです。Linq2Xml REST Webサービスからのパース出力

id name  guid 
0  westralia {81C56183-31DA-45C2-90C3-81609F01B38B} 
10001 lounge  {eac0109e-0090-a992-7fba-dc67fe29e6e7} 

私がされている:私はzoneidを、ZoneNameを、そしてZoneGUID DataTableの返却を希望しています

<?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> 

、私のようなものを返すために機能を望んでいます次の関数を使って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") = [email protected] 
      .Item("value") = result.Value 
     End With 
    Next 
    Return dt 
End Function 

返されるデータテーブルが空である、私は、結果はXMLが割り当てられていないことを確認した、とresult.valueは(200Westralia0 {81C56183-31DA-45C2-90C3-81609F01B38B} Lounge10001 XMLファイルの文字列バージョンであります(ZoneName%)と属性値(Westralia and Lounge)の上のREST XMLの例からどのように読むことができますか?

答えて

1

コードスニペットには3つの問題があります。まず、代わりに

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) 

を追加する必要があります。

最後に、XMLでは大文字と小文字が区別されるため、@Nameではなく@nameを使用する必要があります。

+0

素晴らしい!それは常に簡単なことです(あなたがそれを知っていれば)。私が最後の3時間を取り戻すことができれば、これらの変更は完全に機能しました。 – Lima

関連する問題