2009-07-03 22 views
0

我已經編寫了一個小型掃描程序,旨在通過HTTP在遠程服務器上打開一個PHP腳本的連接,並將其中找到的一些XML抽取到本地文件中。通過HTTP檢索XML並寫入文件的問題

不完全是火箭科學,我知道。

下面的代碼是整個刮板(清理和匿名)。

此代碼工作正常,除了一個小細節外,似乎無論XML文件的大小(1 MB還是7 MB),生成的XML文件總是在最後缺少一小段(600-800個字符)。

注:

  • 如果我在Firefox中打開PHP頁面 - 我得到整個文檔沒有問題。

  • 如果我啓動wireshark並運行下面的程序,我看到整個文檔通過網絡傳輸,但沒有寫入文件。

using System; 
using System.IO; 
using System.Collections.Generic; 
using System.Text; 

namespace myNameSpace 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Console.Write("BEGIN TRANSMISSION\n"); 
       writeXMLtoFile(); 
      Console.Write("END TRANSMISSION\n"); 
     } 


     public static void writeXMLtoFile() 
     { 
      String url = "http://somevalidurl.com/dataPage.php?lotsofpars=true"; 
      TextWriter tw = new StreamWriter("xml\\myFile.xml"); 
      tw.Write(ScreenScrape(url)); 
      Console.Write(" ... DONE\n"); 
      tw.Close(); 
     } 
     public static string ScreenScrape(string url) 
     { 
      System.Net.WebRequest request = System.Net.WebRequest.Create(url); 
      using (System.Net.WebResponse response = request.GetResponse()) 
      { 
       using (System.IO.StreamReader reader = new System.IO.StreamReader(response.GetResponseStream())) 
       { 
        return reader.ReadToEnd(); 

       } 
      } 
     } 
    } 
} 

我應該使用不同的作家?我已經嘗試了TextWriter和StreamWriter來達到同樣的效果。來自冰島

親切的問候,

Gzur

回答

1

嘗試:

XmlDocument doc = new XmlDocument(); 
doc.Load(url); 
doc.Save(filename); 

這真的是那麼容易(有一些明顯的錯誤處理)。 .Net框架應該爲你做所有事情。我在一個月前跳過了一個多月,試圖做同樣的事情,當我閱讀XmlDocument上的幫助文件時踢了自己;)

+0

** **捂臉 你是一個天才。 工程就像一個血腥的魅力。感謝一束。非常感謝 – gzzzur 2009-07-03 15:14:16

+0

無憂無慮。很高興爲了節省一些時間。如果我不需要驗證XML,WebClient.DownloadFile也是我會記得的。 – 2009-07-03 15:18:34

0

它可能就像在StreamWriter上調用Flush()一樣簡單,但爲什麼生活對自己很難?與此更換整個writeXMLtoFile功能:

public static void writeXMLtoFile() 
{ 
    string url = "http://somevalidurl.com/dataPage.php?lotsofpars=true"; 
    string xml = ScreenScrape(url); 
    File.WriteAllText("xml\\myFile.xml", xml); 
} 

這樣,你也可以使用調試器,看看發生了什麼事情(檢查XML變量)。

1

此外,如果真的所有你想要做的是一個網頁下載到文件系統,調查WebClient.DownloadFile方法:)