2013-05-26 23 views
4

我想讓我的winform應用程序讀取保存在Dropbox上的XML文件。但當它到達如何讀取Dropbox上的XML文件與XmlTextReader

if ((reader.NodeType == XmlNodeType.Element) && (reader.Name == "updater")) 

然後它不會繼續。但如果我刪除& &(reader.Name ==「updater」),那麼它會繼續,但它仍然不讀取「版本」和「網址」的值。

鏈接update.xml:https://www.dropbox.com/s/25gcpllsqsj1qrq/update.xml

下面是在我的項目我的C#代碼。我正在嘗試使用XmlTextReader讀取dropbox上的update.xml,但我從未得到任何值!

我試着放置messageboxes給我看reader.Name,但它返回「html」而不是「updater」。

它不需要必須是XmlTextReader。只要解決方案有效,那麼它的罰款:D

任何幫助將不勝感激。

private void checkForUpdatesToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
    Version newVersion = null; 
    string url = ""; 
    XmlTextReader reader = null; 

    try 
    { 
     string xmlURL = "https://www.dropbox.com/s/25gcpllsqsj1qrq/update.xml"; 
     reader = new XmlTextReader(xmlURL); 
     reader.MoveToContent(); 
     string elementName = ""; 
     if ((reader.NodeType == XmlNodeType.Element) && (reader.Name == "updater")) 
     { 
      while (reader.Read()) 
      { 
       if (reader.NodeType == XmlNodeType.Element) elementName = reader.Name; 
       else 
       { 
        if ((reader.NodeType == XmlNodeType.Text) && (reader.HasValue)) 
        { 
         switch (elementName) 
         { 
          case "version": 
           newVersion = new Version(reader.Value); 
           break; 
          case "url": 
           url = reader.Value; 
           break; 
         } 
        } 
       } 
      } 
     } 
    } 
    catch (Exception) 
    { 
    } 
    finally 
    { 
     if (reader != null) reader.Close(); 
    } 

    Version curVersion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version; 
    if (curVersion.CompareTo(newVersion) < 0) 
    { 
     string title = "New version detected."; 
     string question = "Download the new version?"; 
     if (DialogResult.Yes == MessageBox.Show(this, question, title, MessageBoxButtons.YesNo, MessageBoxIcon.Question)) 
     { 
      System.Diagnostics.Process.Start(url); 
     } 
    } 
    else 
    { 
     MessageBox.Show("The program is up to date!"); 
    } 
} 

回答

4

好了,要提供不給你,你可能期望的,它實際上是給你通過Dropbox的包裝內容的XML文件的URL。所以當你在閱讀時,你實際上打到了HTML頁面。您可以在elementName上爲每次迭代設置一個斷點來仔細檢查。

這是正確的URL https://dl.dropboxusercontent.com/s/25gcpllsqsj1qrq/update.xml?token_hash=AAFnI4T9nSCGeVgDKLm7YB79dbjNtoYkAj_mChxVDZL0AQ&dl=1(從Download按鈕,得到了它),在這裏試試這個:

string xmlURL = "https://dl.dropboxusercontent.com/s/25gcpllsqsj1qrq/update.xml?token_hash=AAFnI4T9nSCGeVgDKLm7YB79dbjNtoYkAj_mChxVDZL0AQ&dl=1"; 

這是內容加載到XDocument,並進一步與LINQ查詢它的另一種方式:

string url = "https://dl.dropboxusercontent.com/s/25gcpllsqsj1qrq/update.xml?token_hash=AAFnI4T9nSCGeVgDKLm7YB79dbjNtoYkAj_mChxVDZL0AQ&dl=1"; 
WebRequest request = HttpWebRequest.Create(url); 

using (WebResponse response = request.GetResponse()) 
using (Stream stream = response.GetResponseStream()) 
{ 
    var doc = XDocument.Load(stream); 

    // do your magic (now it's a valid XDocument) 
} 
+2

非常感謝!那正是我需要的。 – MasterXD

+0

我很高興我可以幫助:)乾杯 –