2016-12-27 362 views
0

我想解压和解析位于here下载并解压缩XML文件

这里的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“。

无论是压缩或不压缩,我仍然无法解析此文件。我究竟做错了什么?

回答

1

在保存流本地文件夹中,用的ZipFile类解压缩。 类似这样的:

byte[] byteContent = response.Content.ReadAsByteArrayAsync().Result; 
    string filename = @"C:\temp\1111.zip"; 
    File.WriteAllBytes(filename, byteContent); 

    string destinationDir = @"c:\temp"; 
    string xmlFilename = "report.xml"; 

    System.IO.Compression.ZipFile.ExtractToDirectory(filename, destinationDir); 

    XmlDocument xmlDoc = new XmlDocument(); 
    xmlDoc.Load(Path.Combine(destinationDir, xmlFilename)); 

    //xml reading goes here...