#xml #linq-to-xml #xelement
#xml #linq-to-xml #xelement
Вопрос:
При попытке выполнить синтаксический анализ через RSS-канал для блога я столкнулся с проблемой. Хотя каждый элемент нормально переходит в мой класс, тот, который содержит фактическое содержимое, всегда пуст.
<content:encoded>THIS IS FULL OF HTML
</content:encoded>
Это строка XML, которую, похоже, он не анализирует. Это также единственный файл с двоеточием и единственный, который содержит HTML-данные. Остальные выглядят следующим образом.
<title>
An amazing Title
</title>
<link>
More Junk
</link>
<comments>
Comments and things
</comments>
Ниже приведен мой код, который отлично обрабатывает все остальные элементы. Есть идеи?
allPosts = (from x in feed.Descendants("item")
select new blogPost
{
Creator = (string)x.Element("creator"),
Title = (string)x.Element("title"),
Published = DateTime.Parse((string)x.Element("pubDate")),
Content = (string)x.Element("content"),
Description = (string)x.Element("description"),
Link = (string)x.Element("link"),
}).ToList<blogPost>();
Спасибо
Комментарии:
1. Можете ли вы указать нам на RSS-канал? Кроме того, вы можете захотеть запустить его через средство проверки RSS, например: rssboard.org/rss-validator
Ответ №1:
Похоже, вы ищете контент, а не закодированный. Содержимое — это пространство имен XML, связанное с закодированным элементом. Что вам нужно, так это определить для него правильное пространство имен и добавить его в свой запрос:
XNamespace contentNS = "<whatever the namespace is>";
allPosts = (from x in feed.Descendants("item")
select new blogPost
{
Creator = (string)x.Element("creator"),
Title = (string)x.Element("title"),
Published = DateTime.Parse((string)x.Element("pubDate")),
// Looking for content:encoded
Content = (string)x.Element(contentNS "encoded"),
Description = (string)x.Element("description"),
Link = (string)x.Element("link"),
}).ToList<blogPost>();
Значение contentNS зависит от того, что присутствует в вашем исходном XML, попробуйте поискать определение xmlns: content в корневом элементе.
Комментарии:
1. Я понял это. Проблема, с которой я столкнулся, заключалась в том, что нигде в файле не было определения xmlns: content. В конце концов я нашел это, просмотрев некоторые документы RSS в Интернете. Почему это не включено в файл, я не уверен.