2013-07-14 17 views
1

我在各處查找答案,但到目前爲止我沒有回答我的問題。對於我正在創建的應用程序,我需要從Bukkit.org獲取最新的XML工件。現在,如果我手動(通過瀏覽器)保存XML工件,然後將其加載到我的程序中,它會正常工作,併爲我提供預期格式的XML文件。使用WebClient調用服務時獲取JSON而不是XML文件

但是,如果我使用WebClient訪問該文件,則會遇到問題,因爲Webclient下載的文件甚至不是XML格式。下面列出了一個測試用例。

static void manualLoad() 
    { 
     //local copy 
     XDocument doc = XDocument.Load("artifacts.xml"); 

     var lol = doc.Descendants("build_number"); 

     foreach (XElement e in lol) 
     { 
      Console.WriteLine(e.Value); //correct output 
     } 
    } 

    static void onlineLoad() 
    { 

     WebClient client = new WebClient(); 

     //save to local project folder 
     client.DownloadFile(new Uri("http://dl.bukkit.org/api/1.0/downloads/projects/bukkit/artifacts/") 
      , "C:\\...\\XMLTest\\XMLTest\\bin\\Debug\\lol.xml"); 

     XDocument doc = XDocument.Load("lol.xml"); //error thrown! 


    } 

    static void Main(string[] args) 
    { 
     manualLoad(); //works! 
     onlineLoad(); //throws XMLexception: Data at root level is invalid. 
     Console.ReadKey(); 

    } 

的XML神器我想訪問是在這裏:Bukkit.org XML Artifact

+0

你看下載的文件?它看起來好嗎?原始編碼是什麼?你用什麼編碼下載? – Oded

+0

下載的文件絕對不正確。原文:http://pastebin.com/TCcgyEgZ已下載:http://pastebin.com/91ssebEY – collielimabean

+0

我已更新磁貼以符合您對下載內容的評論。隨意編輯/還原。 –

回答

5

我沒試過你的代碼,但似乎你必須設置接受頭爲application/xml - 看起來像它的默認值到json。

編輯: 您可以設置Web客戶端的標題:

client.Headers.Add("accept", "application/xml"); 
+0

我該怎麼做?我不完全熟悉JSON/XML。 – collielimabean

+1

在我的答案中增加了一個示例;) – lasseeskildsen

+0

現在有效!非常感謝! – collielimabean

相關問題