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

本文关键字:XML 进行 to LINQ 解析 使用 | 更新日期: 2023-09-27 18:20:31

我是使用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>

我正在尝试编写一个查询,返回标签为g的NOTE元素的值为Bilateral的所有团队。任何帮助都会被告知。

谢谢是预付款。

使用LINQ to XML进行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>

那么你需要的是:

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"));