这只是一种预感,但如果您尝试访问该 URI 的频率超过 60 秒,您会收到以下消息:
`Please use a minimum interval of 60 sec (please wait for 10,65625 sec).`
由于此响应显然不是 XML,XmlReader
因此无法对其进行任何操作。
只要连接之间有 60 秒或更长时间,我就能成功运行您的代码。
补充几点:
您的 if 条件不会获得您正在寻找的节点 - XML 区分大小写。它应该是这样的:
if ((reader.NodeType == XmlNodeType.Element) && (reader.Name == "OO"))
LINQ to XML 将是一种更简单(在我看来)的方法:
LINQ to XML 示例
using System.Xml.Linq;
// This loads the XML from the specified URI into the XDocument
XDocument xDoc = XDocument.Load("http://www.bet-at-home.com/oddxml.aspx");
// This query will return a collection of all the "OO" elements (and their children)
var oo = from x in xDoc.Descendants("OO")
select x;
// You can iterate through this collection and do what you want
foreach (XElement ele in oo)
{
// do something with each OO group
}
或者,您可以从查询中返回匿名类型(或定义的类型)。例如:
var oo = from x in xDoc.Descendants("OO")
select new
{
Sport = x.Element("Sport").Value,
Category = x.Element("Category").Value,
Tournament = x.Element("Tournament").Value,
Date = x.Element("Date").Value
// and so on
};
然后,您将拥有可以迭代的这些匿名类型的集合。
如果您定义了一个要在其中保存数据的类(例如 BettingOdds),则只需使用该类,该select new
行将变为select new BettingOdds
.
请注意,您需要检查以确保您引用的元素存在,否则您将获得空引用异常。
互联网上有大量关于您可以使用 LINQ to XML 做什么的示例 - 这是一个示例 - LINQ To XML Tutorials with Examples