2012-02-20 13 views
2
<World> 
    <Animals> 
    <Tab> 
     <Dogs id ="1"> 
     <Dog1></Dog1> 
     <Dog2></Dog2> 
     <Dog3></Dog3> 
     </Dogs> 
     <Dogs id ="2"></Dogs> 
     <Dogs id ="3"></Dogs> 
    </Tab> 
    </Animals> 
</World> 

タグの下にあるすべての要素をid == 1にするにはどうすればよいですか?C#LinqからXMLクエリ

私のLinqクエリ。 (動作しません)なぜですか?

XDocument xml= XDocument.Load(xml.xml); 
var elements = from e in xml.Descendants("Animals").Descendants("Tab").Elements("Dogs") 
where e.Attribute("id").toString().Equals("1") 
select c; 

ご確認いただけますか?

ありがとうございます!

答えて

3
var result = xdoc.Descendants("World") 
       .Descendants("Animals") 
       .Descendants("Tab") 
       .Elements("Dogs") 
       .Where(n => n.Attribute("id").Value == "1"); 

出力:

<Dogs id="1"> 
    <Dog1></Dog1> 
    <Dog2></Dog2> 
    <Dog3></Dog3> 
</Dogs> 
+0

ありがとうございました!問題はn.Attiribute( "id")にありました。 (私は.valueを追加するのを忘れました) –

+0

:)あなたは大歓迎です! – sll

1

私はあなたが

//from e in xml.Descendants("Animals").Descendants("Tab").Elements("Dogs") 
from e in xml.Descendants("Animals").Elements("Tab").Descendants("Dogs") 

と同じ行にしたいと思うあなたのサンプルデータから、あなたが構造を強制したい場合は、Descendants("Animals")Elements("Animals")である可能性があります。

残りのクエリはOKです。

1

または使用するXPath:

xml.XPathSelectElements("/World/Animals/Tab/Dogs[@id=1]") 

や、彼らが発生した場所にすべての犬を見つけるだろう

xml.XPathSelectElements("//Dogs[@id=1]")

+0

犬が "動物"の外に欲しい場合にのみ。 –

関連する問題