我正在尝试从运动赔率Feed中读取xml,但我无法让它工作。 我正在使用xmlReader.Create(url),但我得到的是根级别的数据无效 -error。 这就是代码的样子:
XmlReader reader = XmlReader.Create("http://www.bet-at-home.com/oddxml.aspx");
while (reader.Read())
{
if ((reader.NodeType == XmlNodeType.Element) && (reader.Name == "oo"))
{
//bla bla
}
}
答案 0 :(得分:1)
您需要创建一个httprequest来获取数据。您不能只是将该方法作为网址提供,并希望它将其视为本地文件。首先发出一个http请求并将响应保存在一个字符串中然后你可以像xml一样处理它。这是指向HttpWebRequest
答案 1 :(得分:0)
这只是一种预感,但如果您尝试以超过60秒的频率访问该URI,则会收到以下消息:
`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