Xmldocument.loadxml () бросает исключение типа Comexception
-
26-10-2019 - |
Вопрос
Я пытаюсь проанализировать документ XML, возвращенный из эта ссылка Но я получаю исключение типа ComException
С следующим сообщением:
Error HRESULT E_FAIL has been returned from a call to a COM component.
Вот код:
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...
}
Не могли бы вы помочь мне, почему я получу это сообщение и как я могу это исправить? Спасибо.
РЕДАКТИРОВАТЬ:
Я читаю источник XML, используя эту функцию (возможно, я здесь не ошибаюсь, и я должен что-то сделать, чтобы получить строку в UTF-8, потому что я не вижу немецких символов в строке в режиме отладки (Смотрите окно):
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;
}
}
Решение
XML, который вы предоставили, недопустим, по крайней мере, это то, что говорит Firefox:
Erreur D'Analyze XML: MAL Formé. Размещение: http://www.onlinetvrecorder.com/?> Станции = 3SAT, ANIXE, ARD & от = 30.11.2011 & TO = 30.11.2011 Numéro de Ligne 218, Colonne 193:
(Извините за французы)
Глядя немного ближе, похоже, что анализатор разрывается на слове «Plötzlich», на персонаже «ö».
Вы должны использовать CDATA, чтобы предотвратить это:
<![CDATA[Your text here can contain special chars]]>
Другие советы
Не пытайтесь загружать XML -документ на HTML -странице. Использовать HTML Agility Pack который должен был сделать это.
РЕДАКТИРОВАТЬ: Если вы просто хотите источник страницы в качестве строки, это должно сделать свое дело.
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);