Анализ XML-подкаста iTunes в C# с использованием System.Xml
Я пытаюсь проанализировать XML-канал подкаста iTunes в C# и у меня возникли проблемы. Он успешно загружает канал и помещает его в объект XmlDocument (проверено). После этого он переходит к строке for-each, но никогда не входит в цикл. Я понятия не имею, почему он говорит, что в канале / элементе нет никаких элементов (по крайней мере, я сейчас так думаю). Вот код:
string _returnedXMLData;
XmlDocument _podcastXmlData = new XmlDocument();
public List<PodcastItem> PodcastItemsList = new List<PodcastItem> ();
_podcastXmlData.Load(@"http://thepointjax.com/Podcast/podcast.xml");
string title = string.Empty;
string subtitle = string.Empty;
string author = string.Empty;
foreach (XmlNode node in _podcastXmlData.SelectNodes(@"channel/item")) {
title = node.SelectSingleNode (@"title").InnerText;
subtitle = node.SelectSingleNode (@"itunes:subtitle").InnerText;
author = node.SelectSingleNode (@"itunes:author").InnerText;
PodcastItemsList.Add (new PodcastItem(title, subtitle, author));
}
}
Заранее благодарю за любую помощь! Это высоко ценится!
Kirkland
2 ответа
Исходя из моего комментария, я бы просто использовал XDocument
:
var xml = XDocument.Load("http://thepointjax.com/Podcast/podcast.xml");
XNamespace ns = "http://www.itunes.com/dtds/podcast-1.0.dtd";
foreach (var item in xml.Descendants("item"))
{
var title = item.Element("title").Value;
var subtitle = item.Element(ns + "subtitle").Value;
var author = item.Element(ns + "author").Value;
PodcastItemsList.Add (new PodcastItem(title, subtitle, author));
}
itunes
пространство имен в XML, поэтому вам нужно использовать XNamespace
чтобы объяснить это.
К сведению, на веб-сайте Apple говорится, что ссылка на пространство имен itunes чувствительна к регистру. Я еще не использовал часть version="2.0", но пока она мне не нужна. Я использовал ссылку, скопированную из другого места, которая была "...DTDs/Podcast-1.0.dtd". Только после изменения на нижний регистр синтаксический анализ в моей программе чтения RSS начал работать.