在C#中迭代XML响应

时间:2015-03-31 16:07:03

标签: c# xml

我的XML响应结构如下:

 <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(System.Collections.Generics.IEnumerable,System.Func)'的类型参数。请尝试明确指定参数。”

我需要知道如何根据父母和孩子获得身份证。

1 个答案:

答案 0 :(得分: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;