2
votes

I'm trying to parse the xml document returned from this link but I get an exception of type ComException with the following message:

Error HRESULT E_FAIL has been returned from a call to a COM component.

Here's the code:

        try
        {
            //...
            string EPGXML = await DownloadAsync(url);

            var xmldoc = new XmlDocument();
            xmldoc.LoadXml(EPGXML); //this line throws the exception
            //...rest of the code
        }
        catch (Exception)
        {
            //I get here...
        }

Could you please help me why I get this message and how can I fix this? Thanks.

EDIT:

I'm reading the source of the XML using this function (maybe I'm wrong here and I should do something to get the string in UTF-8, because I don't see the German characters in the string in debug mode (watch window):

    private async static Task<string> DownloadPageAsync(string url)
    {
        try
        {
            HttpClientHandler handler = new HttpClientHandler();
            handler.UseDefaultCredentials = true;
            handler.AllowAutoRedirect = true;
            handler.UseCookies = true;
            HttpClient client = new HttpClient(handler);
            client.MaxResponseContentBufferSize = 10000000;
            HttpResponseMessage response = await client.GetAsync(url);
            response.EnsureSuccessStatusCode();

            string responseBody = response.Content.ReadAsString();
            return responseBody;
        }
        catch (Exception ex)
        {
            return "error" + ex.Message;
        }
    }
2
Is this code running on a (non-main) thread?Henk Holterman
And it's a good idea to mention (tag) when you're using a pre-release version of .NET.Henk Holterman
The link you provided isn't valid XML, although that would normally throw an XmlException. Have you tried loading good XML, though?Timiz0r
I'm using this in WinRT code for my MetroStyle app. And this code runs async on main thread.Alireza Noori

2 Answers

7
votes

The XML you provided is not valid, at least that's what Firefox says:

Erreur d'analyse XML : mal formé Emplacement : http://www.onlinetvrecorder.com/?aktion=epg_export&format=xml&btn_ok=OK&>stations=3SAT,ANIXE,ARD&from=30.11.2011&to=30.11.2011 Numéro de ligne 218, Colonne 193 :

(Sorry for the french)

Looking a bit closer, it looks like the parser breaks on the word "Plötzlich", on the character "ö".

You should use CDATA to prevent this:

<![CDATA[Your text here can contain special chars]]>
3
votes

Do not try to load an XML Document with an html page. Use Html Agility Pack which was meant to do so.

EDIT: If you just want the source of the page as a string this should do the trick.

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://stackoverflow.com/posts/8331002");
request.Method = "GET";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
string data = string.Empty;
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
    data = reader.ReadToEnd();

Console.WriteLine(data);