2013-05-18 2 views
4

В приложении для Windows 8 Store Я читаю некоторые данные Xml, используя SyndicationFeed. Несколько элементов RSS-каналов содержат, например, элементы content:encoded (xmlns: content = '...'). Я думаю, что нет возможности получить содержимое этих элементов через SyndicationItem ?!SyndicationFeed: Как получить доступ к контенту: закодирован?

Вот почему я стараюсь в моем foreach(SyndicationItem item in feeditems) что-то вроде этого:

item.GetXmlDocument(feed.SourceFormat).SelectSingleNode("/item/*:encoded]").InnerText; 

Но это не работает. И я точно знаю, как использовать NamespaceManager и т. Д. В winrt. Пока я получаю доступ к контенту: закодирован с помощью метода NextSibling другого элемента, но это не совсем чистый способ.

Как я могу получить доступ к содержимому элемента лучше всего?

<?xml version="1.0" encoding="UTF-8" ?> 
<rss version="2.0" xmlns:content="URI"> 
<channel> 

<.../> 

<item> 
    <title>Example entry</title> 
    <description>Here is some text containing an interesting description.</description> 
    <link>http://www.wikipedia.org/</link> 
    <content:encoded>Content I try to access</content:encoded> 
</item> 

</channel> 
</rss> 
+0

К сожалению, я добавил некоторые примеры XML. Это обычная rss-лента, за исключением того, что элементы содержат элементы, находящиеся в пространствах имен. – Thrukal

+0

Ответ, который вы ищете, - это [здесь] (http://stackoverflow.com/questions/1121565/syndicationfeed-contentencoded) – Kobynet

ответ

2

Просто используйте XNamespace

XNamespace content = "URI"; 

var items = XDocument.Parse(xml) 
       .Descendants("item") 
       .Select(i => new 
       { 
        Title = (string)i.Element("title"), 
        Description = (string)i.Element("description"), 
        Link = (string)i.Element("link"), 
        Encoded = (string)i.Element(content + "encoded"), //<-- *** 

       }) 
       .ToList(); 
+0

Спасибо за ваш ответ. Я буду отмечать это как ответ, хотя это не очень хорошо сочетается с моим контекстом SyndicationFeed. Кроме того, я только что узнал, что item.Summary.Text из SyndicationItem содержит контент: закодированный элемент ... – Thrukal

1

попробовать это

var items = XDocument.Parse(xml) 
       .Descendants("item") 
       .Select(i => new 
       { 
        Title = (string)i.Element("title"), 
        Description = (string)i.Element("description"), 
        Link = (string)i.Element("link"), 
        Encoded = (string)i.Element("{http://purl.org/dc/elements/1.0/modules/content/}encoded"), //<-- *** 

       }) 
       .ToList(); 

или

var items = XDocument.Parse(xml) 
       .Descendants("item") 
       .Select(i => new 
       { 
        Title = (string)i.Element("title"), 
        Description = (string)i.Element("description"), 
        Link = (string)i.Element("link"), 
        Encoded = (string)i.Element("{http://purl.org/rss/1.0/modules/content/}encoded"), //<-- *** 

       }) 
       .ToList(); 
+0

Это прекрасно работает, я попробовал –