C # Linq to XML запрос - PullRequest
       5

C # Linq to XML запрос

2 голосов
/ 20 февраля 2012
<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?

Мой запрос 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 ]

3 голосов
/ 20 февраля 2012
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>
1 голос
/ 20 февраля 2012

Или используйте XPath:

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

или

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

, чтобы найти всех собак, где бы они ни находились.

1 голос
/ 20 февраля 2012

Из ваших данных образца я думаю, что вы хотите

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

И в той же строке Descendants("Animals") может быть Elements("Animals"), если вы хотите применить структуру.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...