2013-08-27 7 views
1

Я пытаюсь извлечь содержимое <str> тэг:XML Извлечение содержимого C#

<lst name="Stack"> 
    <lst name="Overflow"> 
    <arr name="content"> 
     <str>Help</str> 
    </arr> 
    </lst> 
</lst> 

Код, я использую в C# является:

txtResponse.Text += xDoc.Descendants("lst") 
     .Where(f => (string) f.Attribute("name") == "Overflow") 
     .Descendants("arr") 
     .Descendants("str") 
     .Select(b => b.Value); 

но он возвращает мне

System.Linq.Enumerable+WhereSelectEnumerableIterator`2[System.Xml.Linq.XElement,System.String] 

В чем моя проблема?

+2

Существует уже ответ на свой предыдущий вопрос: http://stackoverflow.com/questions/18462349/parsing-xml- content-c-sharp – MarcinJuraszek

+0

Предыдущий вопрос схож, но есть тонкие отличия –

ответ

2

Код возвращает коллекцию (т. Е. Перечисление) элементов, а не одну. В вашем случае фактически есть IEnumerable<string>, то есть «список строк». Свойство Text ожидает одну строку.

Непонятно из вашего вопроса, как должно выглядеть содержимое txtResponse, но вы можете сделать что-то подобное.

var result = xDoc.Descendants("lst") 
     .Where(f => (string) f.Attribute("name") == "Overflow") 
     .Descendants("arr") 
     .Descendants("str") 
     .Select(b => b.Value); 

    txtResponse.Text = string.Join(", ", result); 
+0

Это сработало отлично, спасибо –

0

, если вам нужно только первую запись, которую нужно только это

txtResponse.Text += xDoc.Descendants("lst") 
        .Where(f => (string) f.Attribute("name") == "Overflow") 
        .Descendants("arr") 
        .Descendants("str") 
        .Select(b => b.Value) 
        .FirstorDefault(); 
+0

'+ =' не может быть применено для ввода типа 'string' и 'group group' error –

+0

Я только что проверил это и отлично работает , – Ehsan

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