9

I am making a web application that takes RSS feeds from websites(URLs are in database) and then loads them into my web application. But I am getting this error

System.Xml.XmlException: Root element is missing. root element is missing. at line : rssdoc.load(rssStream);

Exception Details: System.Xml.XmlException: There are multiple root elements. Line 2, position 2. so how to encapsulate everything else by single xml element

Here is my code:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml;
using System.Net;
using System.Text;
using System.IO;
using System.Data;
using System.Data.SqlClient;

public partial class poletics : System.Web.UI.Page
{
    public SqlConnection oldbcon = new SqlConnection();
    static int n = 0;
    static DataTable dt = new DataTable();
    protected void Page_Load(object sender, EventArgs e)
    {
        oldbcon = opncon();

        using (oldbcon)
        {
            SqlDataAdapter ad = new SqlDataAdapter("SELECT * from LebPolRss", oldbcon);
            ad.Fill(dt);
        }
        int f = 3;
        while (n < f)
        {
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                Literal feed = new Literal();
                try
                {
                    feed.Text = ProcessRss(dt.Rows[i][3].ToString(), dt.Rows[i][4].ToString());
                }
                catch (WebException ex)
                {
                    WebResponse response = ex.Response;
                }
                Panel1.Controls.Add(feed);
            }
            n++;
        }
    }
    public static string ProcessRss(string rssUrl, string feed)
    {
        WebRequest request = WebRequest.Create(rssUrl);
        WebResponse response = request.GetResponse();
        StringBuilder sb = new StringBuilder("");
        Stream rssStream = response.GetResponseStream();
        XmlDocument rssDoc = new XmlDocument();

        rssDoc.Load(rssStream);//here is the line where the exception thrown
        XmlNodeList rssItems = rssDoc.SelectNodes("rss/channel/item");

        string title = "";
        string link = "";
        string description = "";
        int upperlimit = rssItems.Count;
        if (upperlimit > n)
            upperlimit = n + 1;
        if (upperlimit > 0)
        {
            sb.Append("<ul>");
            for (int i = 0; i < upperlimit - n; i++)
            {
                XmlNode rssDetail;
                rssDetail = rssItems.Item(i + n).SelectSingleNode("title");
                if (rssDetail != null)
                {
                    if (feed.ToString().Equals("tayyar"))
                    {
                        title = rssDetail.InnerText.Substring(5);
                    }
                    else
                    {
                        if (rssDetail.InnerText.Length > 75)
                        {
                            title = rssDetail.InnerText.Substring(0, 75);
                        }
                        else
                        {
                            title = rssDetail.InnerText;
                        }
                    }
                }
                else
                {
                    title = "";
                }

                rssDetail = rssItems.Item(i + n).SelectSingleNode("link");
                if (rssDetail != null)
                {
                    if (feed.ToString().Equals("tayyar"))
                    {
                        if (rssDetail.InnerText.Substring(0, 21).CompareTo("http://www.tayyar.org") != 0)
                        {
                            link = "http://www.tayyar.org" + rssDetail.InnerText;
                        }
                        else
                        {
                            link = rssDetail.InnerText;
                        }
                    }
                    else
                    {
                        link = rssDetail.InnerText;
                    }
                }
                else
                {
                    link = "";
                }
                rssDetail = rssItems.Item(i + n).SelectSingleNode("description");
                if (rssDetail != null)
                {
                    if (!rssDetail.InnerText.Substring(3, 3).Equals("Ad:"))
                    {

                        description = rssDetail.InnerText;
                    }

                }
                else
                {
                    description = "";
                }
                switch (feed)
                {
                    case "tayyar": sb.Append("<div class='imgsep'><li><img src='logos/tayyar.jpg' width='50px' height='30px'/>&nbsp;&nbsp;&nbsp;<a href='" + link + "' target='_blank'>" + title + "</a>&nbsp;<img src='Images/smallarrow.png'/></li></div>");
                        break;
                    case "14march": sb.Append("<div class='imgsep'><li><img src='logos/14march.jpg' width='50px' height='30px'/>&nbsp;&nbsp;&nbsp;<a href='" + link + "' target='_blank'>" + title + "</a>&nbsp;<img src='Images/smallarrow.png'/></li></div>");
                        break;
                    case "annahar": sb.Append("<div class='imgsep'><li><img src='logos/annahar.jpg' width='50px' height='30px'/>&nbsp;&nbsp;&nbsp;<a href='" + link + "' target='_blank'>" + title + "</a>&nbsp;<img src='Images/smallarrow.png'/></li></div>");
                        break;
                    case "alakhbar": sb.Append("<div class='imgsep'><li><img src='logos/akhbar.jpg' width='50px' height='30px'/>&nbsp;&nbsp;&nbsp;<a href='" + link + "' target='_blank'>" + title + "</a>&nbsp;<img src='Images/smallarrow.png'/></li></div>");
                        break;
                    case "sadabeirut": sb.Append("<div class='imgsep'><li><img src='logos/echobeirut.png' width='50px' height='30px'/>&nbsp;&nbsp;&nbsp;<a href='" + link + "' target='_blank'>" + title + "</a>&nbsp;<img src='Images/smallarrow.png'/></li></div>");
                        break;
                    case "assafir": sb.Append("<div class='imgsep'><li><img src='logos/assafir.png' width='50px' height='30px'/>&nbsp;&nbsp;&nbsp;<a href='" + link + "' target='_blank'>" + title + "</a>&nbsp;<img src='Images/smallarrow.png'/></li></div>");
                        break;
                    case "aliwaa": sb.Append("<div class='imgsep'><li><img src='logos/aliwaa.jpg' width='50px' height='30px'/>&nbsp;&nbsp;&nbsp;<a href='" + link + "' target='_blank'>" + title + "</a>&nbsp;<img src='Images/smallarrow.png'/></li></div>");
                        break;
                }
            }
            sb.Append("</ul>");
        }
        return sb.ToString();
    }
    protected void LinkButton1_Click(object sender, EventArgs e)
    {
        oldbcon = opncon();
        using (oldbcon)
        {
            SqlDataAdapter ad = new SqlDataAdapter("SELECT * from LebPolRss", oldbcon);
            ad.Fill(dt);
        }
        n = 4;
        for (int i = 0; i < dt.Rows.Count; i++)
        {
            Literal feed = new Literal();
            try
            {
                feed.Text = ProcessRss(dt.Rows[i][3].ToString(), dt.Rows[i][4].ToString());
            }
            catch (WebException ex) { WebResponse response = ex.Response; }
            Panel1.Controls.Add(feed);
        }
        LinkButton1.Visible = false;
    }
    public static SqlConnection opncon()
    {
        string connectionString = "Data Source=RAYYAN-THINK;Initial Catalog=newsProject;Integrated Security=True";
        SqlConnection conn = new SqlConnection(connectionString);
        return conn;
    }
}

Stack Trace:

[XmlException: Root element is missing.]
   System.Xml.XmlTextReaderImpl.Throw(Exception e) +69
   System.Xml.XmlTextReaderImpl.ParseDocumentContent() +5589128
   System.Xml.XmlTextReaderImpl.Read() +215
   System.Xml.XmlLoader.Load(XmlDocument doc, XmlReader reader, Boolean preserveWhitespace) +145
   System.Xml.XmlDocument.Load(XmlReader reader) +107
   System.Xml.XmlDocument.Load(Stream inStream) +130
   poletics.ProcessRss(String rssUrl, String feed) in c:\Users\RAYYAN\Documents\Visual Studio 2012\WebSites\WebSite1\poletics.aspx.cs:57
   poletics.Page_Load(Object sender, EventArgs e) in c:\Users\RAYYAN\Documents\Visual Studio 2012\WebSites\WebSite1\poletics.aspx.cs:36
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +51
   System.Web.UI.Control.OnLoad(EventArgs e) +92
   System.Web.UI.Control.LoadRecursive() +54
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +772
ra22
  • 133
  • 1
  • 3
  • 7
  • 1
    http://meta.stackexchange.com/questions/10647/how-do-i-write-a-good-title – Soner Gönül Oct 31 '13 at 12:39
  • Obviously this seems to be a problem with the xml-file. Perhaps you can post the xml that throws this exception? – user1567896 Oct 31 '13 at 12:44
  • This is too much code. You should use your judgement to post only the relevant parts, post the XML if possible and be clear about on which line the exception is thrown. – H H Oct 31 '13 at 12:47
  • sorry for forgetting to put the line on which the exception is thrown is at: rssdoc.load(rssStream); and i want to add that not always gives me this error. and how i can give you the xml files!!! of all the urls that iam taking from it the feeds!! – ra22 Oct 31 '13 at 13:53

1 Answers1

6

Error explains the most common case of the exception : you have a root element missing in your xml.

Meaning, you most likely have several 'root' elements therefore those are not root elements. You need a single xml element encapsulating everything else. This is first thing to check

frno
  • 1,064
  • 11
  • 24
  • 2
    Maybe you could add a small example just to illustrate it. – Daniel Abou Chleih Oct 31 '13 at 12:50
  • well it is not my xml.. it is their xml and why sometimes it goes perfect and sometime it throw this exception is there a way to handle this exception, besides how can i encapsulate every thing in single xml element please put an example. thanks for helping – ra22 Oct 31 '13 at 14:00
  • Use try-catch to handle exceptions. Before you start to adapt your own software, you should better fix the problem's source. Check why you sometimes get a proper XML and sometimes not. You shouldn't surround the XML, it should be delivered that way – Daniel Abou Chleih Oct 31 '13 at 16:59
  • Daniel Abou Chleih please help me what to do and i really appreciate that you replied – ra22 Oct 31 '13 at 17:51
  • what do you mean by "shouldn't surround the XML" – ra22 Oct 31 '13 at 17:53
  • We need to see the proper XML and the one that causes the error. Otherwise we can't really help you. – Daniel Abou Chleih Oct 31 '13 at 21:35
  • mmmm mr. daniel can you please tell me how to get you the proper xml?! i can't even know which url or urls is causing this problem so please tell me how to bring you the xml? – ra22 Oct 31 '13 at 22:29
  • hey frno you are right there is multiple root elements the exception is: Exception Details: System.Xml.XmlException: There are multiple root elements. Line 2, position 2. so how to encapsulate everything else by single xml element – ra22 Nov 01 '13 at 14:49