2009-07-26 2 views
1

У меня есть проблема с моим Linq для запроса XML:Linq к ошибке XML

var q = (from f in xmlLang.Element("lang").Elements("page") 
       where (string)f.Attribute("id") == "home" 
       select f.Element(LangElement).Value.ToString()).Take(1).SingleOrDefault(); 

XML-выглядит так,

<lang> 
    <page id="home"> 
    <hello>Hello!</hello> 
    </page> 
    ... 
</lang> 

Я получаю эту ошибку: Ссылка на объект не указывает на экземпляр объекта.

+0

Возможно, вы также должны показать нам назначение переменной xmlLang. В противном случае я вижу мало шансов, чтобы кто-нибудь мог ответить на ваш вопрос ничем, кроме чистой угадывающей удачи. – chrischu

+0

Возможно, вы можете использовать First вместо Take (1) .SingleOrDefault() –

ответ

0

Что должно быть f.Element(LangElement)?

  • Вы не указали LangElement в любом месте этого фрагмента.
  • Для удобства чтения я бы дал f более описательное название (скажем, langpage или что-то еще).
  • .Take(1).SingleOrDefault() более сжато кладется как .FirstOrDefault()

Этот код работает:

var xmlLang = XDocument.Parse(@" 
<lang> 
    <page id=""home""> 
    <hello>Hello!</hello> 
    </page> 
    ... 
</lang>"); 

var q = (from langpage in xmlLang.Element("lang").Elements("page") 
     where langpage.Attribute("id").Value == "home" 
     select langpage.Element("hello").Value).FirstOrDefault(); 

Если xmlLang загружается иначе, ваш запрос не может быть соответствие какой-либо элемент «языки» - отсюда исключение.

+0

LangElement = строка, например «привет». – 2009-07-26 13:54:29

+0

Спасибо за помощь :) – 2009-07-26 14:05:36