2015-03-28 2 views
0

Я знаю веб-ссылку XML-файла, и я использую его в своем приложении.Чтение XML в WinRT

Это корневой элемент feed, и он имеет несколько дочерних элементов, называемых entry. Каждый entry имеет элемент summary, который состоит из текста и нескольких дочерних тегов. Например,

<entry> 
    <title type="text">money giving</title> 
     <author> 
     <name>BMA</name> 
     </author> 
    <summary type="text"> 
     <short-description>we give you money</short-description> 
     <tab id="0" header="Header &amp; d"> 
     This is Line 1 
     This is Line 2 
     This is Line 3 
     </tab> 
     <tab id="1" header="abc"> 
     Only one line here 
     </tab> 
    </summary> 
    </entry> 

Я хочу, чтобы получить полный текст внутри summary, в том числе дочерних тегов short-description и tags. Я попытался с помощью этого кода:

XmlDocument xmlDoc = await XmlDocument.LoadFromUriAsync(new Uri("http://bigmanani.com/Kiosk-RSS_updated.xml")); 
XDocument xDoc = XDocument.Parse(xmlDoc.GetXml()); 
XElement root = xDoc.Root; 
XNamespace ad = "http://www.w3.org/2005/Atom"; 
IEnumerable<string> title = from abc in root.Descendants(ad+"summary") select (string)abc; 

foreach(string one in title) 
    DebugMessage(one); 

Проблема вот что я получаю только текстовую часть summary элемента, и дочерние элементы short-description и tab игнорируются полностью. Как я могу получить полный текст?

+0

Так что выход вы видите? Я бы * ожидал * видеть «мы даем вам деньги» Это линия 1 Это линия 2 Это линия 3 Только одна строка здесь »- это будет соответствовать тесту, который я только что выполнил ... Если вы ожидали см. имена и атрибуты дочерних элементов, вы не должны указывать на 'string'. –

+0

Это результат, но я также хочу, чтобы дочерние теги были включены, поэтому вывод должен быть «<краткое описание>, мы даем вам деньги

+0

Правильно, так что don 't нарисовать 'string'. Но имейте в виду, что это не «полный текст» в отношении XML - это смесь текстовых узлов, узлов элементов, атрибутов и т. Д. Это текст, если вы считаете XML как строку, но лучше подумать об этом как дерево узлов. –

ответ

1

Это звучит, как вы просто не хотите, бросание в строку, которая documented как:

Если XElement есть дети, каскадный строковое значение всего текста элемента и текст потомка по возвращается ,

Вы, вероятно, хотите ToString() вместо:

Возвращает отступ XML для данного узла.

Итак:

var title = root.Descendants(ad + "summary").Select(x => x.ToString()); 

(Там нет никакой выгоды в использовании выражения запроса для только простой проекции - вызов метода расширения проще.)