2012-02-20 3 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 to XML query

Мой запрос 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. (Я забыл добавить .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"), если вы хотите обеспечить структуру.

В остальном ваш запрос выглядит нормально.

1

Или использовать XPath:

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

или

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

, который найдет все Dogs где бы они ни происходили.

+0

Только если вы хотите Собаки вне «Животные» тоже. –