Почему при попытке получить доступ к атрибуту в LINQ-to-XML возникает ошибка? - PullRequest
2 голосов
/ 05 августа 2009

Согласно моей книге LINQ, этот слегка измененный пример должен работать.

Почему он говорит мне " Ссылка на объект не установлена ​​для экземпляра объекта "?

using System;
using System.Xml.Linq;

namespace TestNoAttribute
{
    class Program
    {
        static void Main(string[] args)
        {

            XDocument xdoc = new XDocument(
                new XElement("employee",
                    new XAttribute("id", "23"),
                    new XElement("firstName", new XAttribute("display", "true"), "Jim"),
                    new XElement("lastName", new XAttribute("display", "false"), "Smith")));

            XElement element = xdoc.Element("firstName");
            XAttribute attribute = element.Attribute("display"); //error

            Console.WriteLine(xdoc);

            Console.ReadLine();

        }
    }
}

Частичный ответ:

Я понял, что если я изменю XDocument на XElement , то это сработает. Может ли кто-нибудь объяснить почему ?

Ответы [ 2 ]

4 голосов
/ 05 августа 2009

Вы получаете доступ к дочернему элементу xdoc, который не существует.Попробуйте на один уровень вниз:

XElement element = xdoc.Element("employee").Element("firstName");

или

XElement element = xdoc.Descendants("firstName").FirstOrDefault();
2 голосов
/ 05 августа 2009

См. это на MSDN, почему. Это явно объясняет их «идиому» о том, почему они чувствовали, что возвращать нулевой элемент, когда имя не найдено, было полезно.

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