2012-02-16 2 views
1

Так что я совсем не хотел публиковать его, поскольку уже есть бесконечные документы об этом. Его было 2 года, когда я коснулся LINQ, и теперь он забрал меня. После 3 часов непрерывных попыток и неудач я решил сделать то, чего не хотел. Отправьте его в SO.Получите значение из XML через linq

У меня есть этот XML

<TopMost xmlns="http://abc.com/"> 
    <Mine>MyName</Mine> 
    <Hello> 
     <File>SIMPLE</File> 
     <Book>20</Book> 
     <Copy>0</Copy> 
    </Hello> 
</TopMost> 

Я просто хочу, чтобы получить значения "Файл", "Книга", "Копировать". и хотите сравнить его с чем-то в Unit Test.

Я достиг ДО этого:

string result = string.Empty; 
const string path = @"C:\Library.xml"; 
XDocument xdoc = XDocument.Load(path); 

var lv1s = from paper in xdoc.Descendants("Hello") 
    select new 
     { 
      fileP = paper.Element("File").Value, 
      bookP = paper.Element("Book").Value, 
      copyP = paper.Element("Copy").Value, 
     }; 
result += lv1s.fileP + lv1s.bookP + lv1s.copyP; // Error 
MessageBox.Show(result); 

Ошибка: Последовательность не содержит элементов

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

EDIT

var lv1s = from paper in xdoc.Descendants(ns + "Hello") 
    select new 
     { 
      fileP = paper.Element(ns + "File").Value, 
      bookP = paper.Element(ns + "Book").Value, 
      copyP = paper.Element(ns + "Copy").Value, 
     }; 

Я получаю ошибку компиляции.

Error: The Name ns doex not exist in current context. 
+0

Я предполагаю, что счет-фактура == или наоборот? –

+0

его бумага ....... извините – Sandy

ответ

5

Вы должны указать namespcae:

XNamespace ns = "http://abc.com/"; // or: doc.Root.GetDefaultNamespace() 

var lv1s = from paper in xdoc.Descendants(ns + "Hello") 
    select new 
     { 
      fileP = paper.Element(ns +"File").Value, 
      bookP = paper.Element(ns +"Book").Value, 
      copyP = paper.Element(ns +"Copy").Value, 
     }; 

Не поддавайтесь соблазну использовать string ns или var ns.

+0

'ns' означает' 'ns" '..... мой VS 2010 не смог разрешить' ns' – Sandy

+1

@rapsalands: это 'XNamespace', без капитала * S * , –

+0

Опубликовать код, который не работает (добавить к концу вопроса). –

Смежные вопросы