2014-09-03 13 views
-3

我是使用LINQ進行XML解析的新手。我有以下的XML:使用LINQ to 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元素的值是雙邊的。 任何幫助都非常appriciated。

非常感謝。

+0

嘿蒂姆。我試圖不使用lambda表達式。正如我告訴你的,我是一個完整的新手在XML解析和LINQ查詢。你的幫助是非常appriciated。 – 2014-09-05 08:52:12

回答

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

非常感謝蒂姆。有用。 – 2014-09-03 13:33:19

相關問題