linq to xml Выберите только узлы, которые имеют определенные элементы - PullRequest
0 голосов
/ 06 марта 2012

Со следующим xml я хочу вернуть только те элементы, где есть дочерний элемент в узле <category domain="Portal Sub" value="Events">.

Я попытался с помощью следующего кода, но он по-прежнему возвращает все узлы.Буду признателен за любую помощь, поскольку я не могу понять, как получить только элементы, в которых присутствует дочерний узел.

  <item guid="123">
  <title>test1</title>
        <category domain="Target">Business Decision Makers</category>
        <category domain="Target">Individual Customers</category>
        <category domain="Target">IT Decision Makers</category>
        <category domain="Portal" value="IT Network">
            <category domain="Portal Sub" value="Events">
                <category domain="Portal Sub" value="Forum" />
            </category>
        </category>
    </item>
    <item guid="456">
    <title>test2</title>
        <category domain="Target">IT managers</category>
        <category domain="Target">IT Professional</category>
        <category domain="Portal" value="IT Network">
            <category domain="Portal Sub" value="Events" />
        </category>
    </item>





var getFilteredItems = (from item in xdoc.Descendants("item")
                            where item.Descendants("category").Descendants("category").Any()
                            select new
                             {
                                     etype = (from x in item.Elements("category").Elements("category")
                                          where x.Attribute("value").Value == "Events"
                                          select new
                                          {
                                              cctype = x.Descendants("category").Select(i => i.Attribute("value").Value ?? "")
                                          }).First()

                             }).ToList();

1 Ответ

1 голос
/ 06 марта 2012
from item in xdoc.Descendants("item")
where item.Descendants("category").Any(c => (string)c.Attribute("domain") == "Portal"
  && (string)c.Attribute("value") == "Events" && c.Elements().Any())
select ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...