Согласно моей книге 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, тогда он работает. Может ли кто-нибудь объяснить почему?
Вы получаете дочерний элемент xdoc
, который не существует. Попробуйте один уровень вниз:
XElement element = xdoc.Element("employee").Element("firstName");
или
XElement element = xdoc.Descendants("firstName").FirstOrDefault();
См. this в MSDN относительно причины. В нем явно объясняется их "идиома" о том, почему они чувствовали, что возвращают нулевой элемент, когда имя не найдено, было полезно.