2015-03-31 54 views
0

的XML響應我有結構如下的XML響應:迭代IN C#

<e:Parents> 
    <d1p1:Parent> 
    <d1p1:Name>A</d1p1:Name> 
    <d1p1:Child>a1</d1p1:Child> 
    <d1p1:Id>101</d1p1:Id> 
    </d1p1:Parent> 
    <d1p1:Parent> 
    <d1p1:Name>A</d1p1:Name> 
    <d1p1:Child>a2</d1p1:Child> 
    <d1p1:Id>102</d1p1:Id> 
    </d1p1:Parent> 
    <d1p1:Parent> 
    <d1p1:Name>B</d1p1:Name> 
    <d1p1:Child>b1</d1p1:Child> 
    <d1p1:Id>201</d1p1:Id> 
    </d1p1:Parent> 
    <d1p1:Parent> 
    <d1p1:Name>B</d1p1:Name> 
    <d1p1:Child>b2</d1p1:Child> 
    <d1p1:Id>202</d1p1:Id> 
    </d1p1:Parent> 
</e:Parents> 

現在基於給定的輸入(例如,A a2)的我需要來獲取ID(例如102)。

在我的功能我想使用的東西這樣

int getId(string str)       // str = A a2 
{ 
    int index = str.IndexOf(' '); 
    string p = str.Substring(0, index);  //A 
    string c = str.Substring(index);  //a2 
    var parent = response.Parents.FirstOrDefault(e => e.Name == p && e.Child == c); 
    return parent.Id; 
} 

它給了我這說的錯誤:

「的類型參數的方法「System.Linq.Enumerables.FirstOrDefault(系統.Collections.Generics.IEnumerable,System.Func)'不能根據用法推斷,請嘗試明確指定參數。「

我需要知道如何獲得基於父母和孩子的ID。

+0

你看着'XPath'? – user1 2015-03-31 16:15:26

+0

不,我還沒有嘗試過。 – 2015-03-31 16:22:03

回答

1

以下LINQ表達式應該給你你正在尋找的價值:

XElement xmlSet = XElement.Parse (yourXmlStringHere); 

// Will contain the <parent>..</parent> you want 
var parentNode = 
     xmlSet.Elements("d1p1:Parent") 
      .First(e => e.Elements("d1p1:Name").First().Value == "B" 
         && e.Elements("d1p1:Child").First().Value == "a2"); 

// This will fetch the value - 102 in this case: 
var value = parentNode.Elements("d1p1:Id").First().Value; 
+0

可能有多個父節點,其子值爲a2。 例如父母A和父母B都可以有一個名爲a2的孩子。 但是如果輸入是'B a2',我需要返回它的Id。意思是說我需要檢查父值和子值。 – 2015-03-31 16:35:13

+0

我有一個XML響應。不是一個XML字符串。 – 2015-03-31 16:39:17

+0

我已經更新了我的答案,以檢查「Name」和「Child」。至於你的迴應,你可能能夠運行linq查詢(?)。如果沒有,我相信你可以找出一種方法來將xml提取爲一個字符串,可以像我在這裏展示的那樣解析它。如果你不需要,那麼就忽略它。查詢是這裏的要點。 – Kjartan 2015-03-31 16:52:51