Разбор XML-данных с помощью XDocument / XElement - PullRequest
1 голос
/ 28 апреля 2011

При попытке разобрать канал 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 Ответ

1 голос
/ 28 апреля 2011

Похоже, вы ищете контент, а не закодированный. Содержимое - это пространство имен XML , связанное с закодированным элементом. Вам нужно определить правильное XNamespace для него и добавить его к вашему запросу:

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 в корневом элементе.

...