LINQ to XML - Попытка выбрать список элементов по значению их атрибутов - PullRequest
1 голос
/ 12 ноября 2010

Я пытаюсь получить список элементов из документа XML, где узлы имеют определенное значение атрибута.Документ структурирован примерно так:

<root>
  <node type="type1">some text</node>
  <node type="type2">some other text</node>
  <node type="type1">some more text</node>
  <node type="type2">even more text</node>
</root>

В результате я хотел бы получить IEnumerable<XElement>, содержащий два узла с type = "type1", например,

  <node type="type1">some text</node>
  <node type="type1">some more text</node>

Я загружаю документ, используя var doc = XDocument.Load(@"C:\document.xml");

Я могу получить IEnumerable<XAttribute>, содержащий атрибуты от узлов, которые я хочу использовать

var foo = doc.Descendants("node")
    .Attributes("type")
    .Where(x => x.Value == "type1")
    .ToList();

Однако, если я пытаюсь получить элементыкоторые содержат эти атрибуты, используя код ниже, я получаю ошибку Object reference not set to an instance of an object..Код, который я использовал:

var bar = doc.Descendants("node")
    .Where(x => x.Attribute("type").Value == "type1")
    .ToList();

Любая помощь в выяснении, почему я не получаю ожидаемых результатов, будет оценена.

Ответы [ 2 ]

3 голосов
/ 12 ноября 2010

Это может произойти, если узлу не хватает атрибута.Попробуйте:

 var bar = doc.Descendants("node")
    .Where(x => (string)x.Attribute("type") == "type1")
    .ToList();
1 голос
/ 12 ноября 2010
var bar = doc.Descendants("node")
.Where(x => x.Attribute("type") != null && x.Attribute("type").Value == "type1")
.ToList();

Добавление защиты для нулевых значений решает вашу проблему.

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