使用LINQ to XML进行XML解析:具有相同名称的多个后代

时间:2014-09-03 07:47:39

标签: c# xml linq parsing

我是使用LINQ进行XML解析的新手。我有以下XML:

<TEAM Action="abcd" TeamID="1234">
    <INST InstID="10001" />
    <TERM Label="abc" Desc="" Default="" Type="string">Non</TERM>
    <A>
      <NOTE Label="a">U</NOTE>
      <NOTE Label="b">69537f</NOTE>
      <NOTE Label="c">Po</NOTE>
      <NOTE Label="d">f59/NOTE>
      <NOTE Label="e">2014</NOTE>
      <NOTE Label="f">Non</NOTE>
      <NOTE Label="g">Bilateral</NOTE>
      <NOTE Label="h">Jo</NOTE>
      <NOTE Label="i">602</NOTE>
   </A>
  </TEAM>

  <TEAM Action="abcdefg" TeamID="2345">
    <INST InstID="10003" />
    <TERM Label="abc" Desc="" Default="" Type="string">Non</TERM>
    <A>
      <NOTE Label="a">U</NOTE>
      <NOTE Label="b">69537f</NOTE>
      <NOTE Label="c">Po</NOTE>
      <NOTE Label="d">f59/NOTE>
      <NOTE Label="e">2014</NOTE>
      <NOTE Label="f">Non</NOTE>
      <NOTE Label="g">Simple</NOTE>
      <NOTE Label="h">Jo</NOTE>
      <NOTE Label="i">602</NOTE>
   </A>
  </TEAM>

我正在尝试编写一个查询,该查询返回所有具有label = g的NOTE元素的值为双边的团队。 任何帮助都很受欢迎。

谢谢你的到来。

1 个答案:

答案 0 :(得分:0)

首先,你发出的xml是错误的,应该是

<TEAM Action="abcd" TeamID="1234">
    <INST InstID="10001" />
    <TERM Label="abc" Desc="" Default="" Type="string">Non</TERM>
    <A>
      <NOTE Label="a">U</NOTE>
      <NOTE Label="b">69537f</NOTE>
      <NOTE Label="c">Po</NOTE>
      <NOTE Label="d">f59</NOTE>
      <NOTE Label="e">2014</NOTE>
      <NOTE Label="f">Non</NOTE>
      <NOTE Label="g">Bilateral</NOTE>
      <NOTE Label="h">Jo</NOTE>
      <NOTE Label="i">602</NOTE>
   </A>
  </TEAM>

  <TEAM Action="abcdefg" TeamID="2345">
    <INST InstID="10003" />
    <TERM Label="abc" Desc="" Default="" Type="string">Non</TERM>
    <A>
      <NOTE Label="a">U</NOTE>
      <NOTE Label="b">69537f</NOTE>
      <NOTE Label="c">Po</NOTE>
      <NOTE Label="d">f59</NOTE>
      <NOTE Label="e">2014</NOTE>
      <NOTE Label="f">Non</NOTE>
      <NOTE Label="g">Simple</NOTE>
      <NOTE Label="h">Jo</NOTE>
      <NOTE Label="i">602</NOTE>
   </A>
  </TEAM>

那么你需要的是:

var xml=XDocument.Load("d:\\test.xml");
var list=xml.Descendants("TEAM")
            .Where(x=>x.Element("A").Elements("NOTE")
                       .Any(n=>n.Attribute("Label").Value=="g" && n.Value=="Bilateral"));