System.Xml.XmlException - Root element is missing

ra22 picture ra22 · Oct 31, 2013 · Viewed 45.2k times · Source

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

Answer

frno picture frno · Oct 31, 2013

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