尝试从不以.xml结尾的文件中读取xml

时间:2013-05-31 23:01:51

标签: c# asp.net xml feed xmlreader

我正在尝试从运动赔率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
            }
        }

2 个答案:

答案 0 :(得分:1)

您需要创建一个httprequest来获取数据。您不能只是将该方法作为网址提供,并希望它将其视为本地文件。首先发出一个http请求并将响应保存在一个字符串中然后你可以像xml一样处理它。这是指向HttpWebRequest

的{{1}}的链接

答案 1 :(得分:0)

这只是一种预感,但如果您尝试以超过60秒的频率访问该URI,则会收到以下消息:

`Please use a minimum interval of 60 sec (please wait for 10,65625 sec).` 

由于此响应显然不是XML,XmlReader无法对其执行任何操作。

只要连接之间有60秒或更长时间,我就能成功运行您的代码。

要添加的几件事情:

  1. 您的if条件不会获得您要查找的节点 - XML区分大小写。它应该是这样的:

    if((reader.NodeType == XmlNodeType.Element)&&(reader.Name ==“OO”))

  2. LINQ to XML将更容易(在我看来)这样做:

  3. 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