Вопрос

I recently had a problem with xml parsing in my Windows Phone 8 application, I can read all tags in the XML feed like title, description, etc. straight away. But I'm not able to get the inner attribute from tags which is contains a ":" symbol for example: <media:content ... /> or <media:text ../> etc.

Here is the XML feed from Yahoo: http://cricket.yahoo.com/news/rss/.

Every item is like this:

   <item>
      <title>Asia Cup: India vs Sri Lanka</title>
   <description>
       <p><a href="http://cricket.yahoo.com/prematch-india-vs-sri-lanka_188453"><img                     src="http://l3.yimg.com/bt/api/res/1.2/2rY73ROpgTT4wBxyQqSjwA--/YXBwaWQ9eW5ld3M7Zmk9ZmlsbDtoPTg2O3B4b2ZmPTUwO3B5b2ZmPTA7cT03NTt3PTEzMA--/http://media.zenfs.com/en_us/News/ap_webfeeds/112af677510d1a084d0f6a706700f2a0.jpg" width="130" height="86" alt="India’s Shikhar Dhawan plays a shot during the Asia Cup one-day international cricket tournament against Sri Lanka in Fatullah, near Dhaka, Bangladesh, Friday, Feb. 28, 2014. (AP Photo/A.M. Ahad)" align="left" title="India’s Shikhar Dhawan plays a shot during the Asia Cup one-day international cricket tournament against Sri Lanka in Fatullah, near Dhaka, Bangladesh, Friday, Feb. 28, 2014. (AP Photo/A.M. Ahad)" border="0" /></a>Fatullah - India lose quick wicket after Dhawan&#039;s dismissal for 94.</p><br clear="all"/>
    </description>
    <link>
       http://cricket.yahoo.com/prematch-india-vs-sri-lanka_188453
    </link>
   <pubDate>Fri, 28 Feb 2014 13:08:29 +0530</pubDate>
   <guid isPermaLink="false">prematch-india-vs-sri-lanka_188453</guid>
   <media:content url="http://l3.yimg.com/bt/api/res/1.2/2rY73ROpgTT4wBxyQqSjwA--/YXBwaWQ9eW5ld3M7Zmk9ZmlsbDtoPTg2O3B4b2ZmPTUwO3B5b2ZmPTA7cT03NTt3PTEzMA--/http://media.zenfs.com/en_us/News/ap_webfeeds/112af677510d1a084d0f6a706700f2a0.jpg" type="image/jpeg" width="130" height="86"/>
    <media:text type="html">
      <p><a href="http://cricket.yahoo.com/prematch-india-vs-sri-lanka_188453"><img src="http://l3.yimg.com/bt/api/res/1.2/2rY73ROpgTT4wBxyQqSjwA--/YXBwaWQ9eW5ld3M7Zmk9ZmlsbDtoPTg2O3B4b2ZmPTUwO3B5b2ZmPTA7cT03NTt3PTEzMA--/http://media.zenfs.com/en_us/News/ap_webfeeds/112af677510d1a084d0f6a706700f2a0.jpg" width="130" height="86" alt="India’s Shikhar Dhawan plays a shot during the Asia Cup one-day international cricket tournament against Sri Lanka in Fatullah, near Dhaka, Bangladesh, Friday, Feb. 28, 2014. (AP Photo/A.M. Ahad)" align="left" title="India’s Shikhar Dhawan plays a shot during the Asia Cup one-day international cricket tournament against Sri Lanka in Fatullah, near Dhaka, Bangladesh, Friday, Feb. 28, 2014. (AP Photo/A.M. Ahad)" border="0" /></a>Fatullah - India lose quick wicket after Dhawan&#039;s dismissal for 94.</p><br clear="all"/>
   </media:text>
    <media:credit role="publishing company"/>
  </item>

And my code to parse and get data is:

try
{
    XNamespace media = "http://cricket.yahoo.com/news/rss/";

    XDocument xmlDoc = XDocument.Parse(e.Result);
    var all = xmlDoc.Descendants("channel");
    List<News1> _singleRsses = new List<News1>();
    foreach (var item in all)
    {
        var itemVedio = item.Descendants("item");
        foreach (var xElement in itemVedio)
        {
            string _title = xElement.Element("title").Value;
            string _description = xElement.Element("description").Value;
            string pubDate = DateTime.Parse(xElement.Element("pubDate").Value).ToString();
            string link = xElement.Element("link").Value;
            string _imageSource = xElement.Element(media+"content").Attribute("url").Value;

            News1 _singleRss = new News1
            {
                Title = _title,
                description = Regex.Replace(_description, "<.+?>", string.Empty),
                PubDate = pubDate,
                Link = link,
                Image=_imageSource
            };
            _singleRsses.Add(_singleRss);
        }
    }
    newsListbox.DataContext = _singleRsses;
}
catch (Exception exp)
{
    MessageBox.Show("Exception: " + exp);
    _progressIndicator.IsIndeterminate = false;
    _progressIndicator.IsVisible = false;
}


public class News1
{
    public string Title { get; set; }
    public string Image { get; set; }
    public string description { get; set; }
    public string PubDate { get; set; }
    public string Link { get; set; }
}

After some tutorials i used XNamespace too, but it won't work and I got this error:

Exception: system.nullReferenceException:  Object reference not set to an instance of an object

Нет правильного решения

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top