SyndicationFeed: Как получить доступ к контенту: закодировано?
В приложении для Магазина Windows 8 я читаю некоторые данные XML, используя SyndicationFeed
, Например, некоторые элементы RSS-каналов содержат content:encoded
(xmlns:content='...') элементы. Я думаю, что нет никакого способа получить содержимое этих элементов через SyndicationItem?!
Вот почему я пытаюсь внутри 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>
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();
Попробуй это
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();