我正在尝试让我的winform应用程序读取存储在dropbox上的xml文件。但是当它到达
时if ((reader.NodeType == XmlNodeType.Element) && (reader.Name == "updater"))
然后它不会继续。但如果我删除&& (reader.Name ==“updater”)然后它继续但它仍然没有读取“version”和“url”的值。
指向update.xml的链接:https://www.dropbox.com/s/25gcpllsqsj1qrq/update.xml
以下是我项目中的C#代码。我正在尝试使用XmlTextReader读取dropbox上的update.xml,但我从来没有得到任何值!
我尝试将消息框放在向我显示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!");
}
}
答案 0 :(得分:4)
好吧,转到提供的Url并没有像您期望的那样提供XML文件,它实际上是通过Dropbox包装器为您提供内容。因此,当您正在阅读时,您实际上正在点击HTML
页面。您可以通过在elementName
上为每次迭代设置一个断点来仔细检查。
这是正确的网址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)
}