【问题标题】:XML parsing using LINQ to XML: Multiple descendants with same name使用 LINQ to XML 解析 XML:具有相同名称的多个后代
【发布时间】:2014-09-03 07:47:39
【问题描述】:

我是使用 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 元素的值为 Bilateral 的团队。 任何帮助都非常感谢。

先谢谢了。

【问题讨论】:

  • 嘿蒂姆。我试图不使用 lambda 表达式。正如我告诉过你的,我是 xml 解析和 linq 查询的新手。非常感谢您的帮助。

标签: c# xml linq parsing


【解决方案1】:

首先,你给出的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"));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-20
    • 1970-01-01
    • 1970-01-01
    • 2015-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多