Я хотел бы распаковать и проанализировать файл XML, расположенного hereСкачать и распаковать XML файл
Вот мой код:
HttpClientHandler handler = new HttpClientHandler()
{
CookieContainer = new CookieContainer(),
UseCookies = true,
AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate,
// | DecompressionMethods.None,
};
using (var http = new HttpClient(handler))
{
var response =
http.GetAsync(@"https://login.tradedoubler.com/report/published/aAffiliateEventBreakdownReportWithPLC_806880712_4446152766894956100.xml.zip").Result;
Stream streamContent = response.Content.ReadAsStreamAsync().Result;
using (var gZipStream = new GZipStream(streamContent, CompressionMode.Decompress))
{
var settings = new XmlReaderSettings()
{
DtdProcessing = DtdProcessing.Ignore
};
var reader = XmlReader.Create(gZipStream, settings);
reader.MoveToContent();
XElement root = XElement.ReadFrom(reader) as XElement;
}
}
я получаю исключение на XmlReader.Create (gZipStream, настройка)
Неверное магическое число в заголовке GZip. Убедитесь, что вы передаете в потоке GZip
Чтобы перепроверить, что я получаю правильно отформатированные данные из Интернета, я хватаю поток и сохранить его в файл:
byte[] byteContent = response.Content.ReadAsByteArrayAsync().Result;
File.WriteAllBytes(@"C:\\temp\1111.zip", byteContent);
После разглядываю 1111 .zip, он выглядит как хорошо отформатированный zip-файл с XML-файлом, который мне нужен.
мне посоветовали here, что мне не нужно GZipStream на всех, но если я удалить поток сжатия из кода полностью, и передать streamContent непосредственно к читателю XML, я получаю исключение:
«данных в корне уровень недействителен. Строка 1, позиция 1. "
Как сжатый, так и сжатый, я все равно не могу проанализировать этот файл. Что я делаю не так?