2012-04-22 66 views
0

我真的没有太多的XML工作,我会感谢一些帮助。使用System.Data.DataSet在.Net中读取XML/RSS?

我想读WeatherBug公司

一个RSS feed我发现一些示例代码在这里:

http://geekswithblogs.net/thibbard/archive/2006/01/13/65764.aspx

当他们使用System.Data.DataSet中读取XML饲料。

(他们使用VBasic我使用VC#)

这里是XML我想读的一个样本:

http://api.wxbug.net/getLiveCompactWeatherRSS.aspx?ACode=A5333948364&zipcode=80918&unittype=0&OutputType=1

在代码示例中,他们得到的风速如下:

_wind = DS.Tables( “风速”)行(0).Item( “风speed_Text”)

我怎么知道指定FO什么r每个索引值?我想我明白他们是如何确定风速的,但他们是如何确定如何指定wind-speed_Text?

我可以使用看到在我的调试器的值:

m_ds.Tables [ “风速”]行[0] .ItemArray

我可以看到3个值。 “MPH”,“3”和0.

MPH将是单位。 “3”将是速度。不知道什么是0。

如何访问aws的值:WebURL?

而我只看到8张桌子,但还有更多值。通过拨动调试器,我在Weather表中找到了这些URL以及风向和阵风方向的值。

我以为我把整桌的东西都钉牢了,但似乎没有韵,也没有理由。

任何人都可以把我放在正确的道路上?基本上,我只需要知道如何根据我在XML中看到的内容找出在DataTable中找到的东西。

感谢

回答

1

方便快捷:

XDocument doc = XDocument.Load("http://api.wxbug.net/getLiveCompactWeatherRSS.aspx?ACode=A5333948364&zipcode=80918&unittype=0&OutputType=1"); 
      XNamespace ns = "http://www.aws.com/aws"; 
      var webUrl = doc.Element(ns + "weather").Element(ns + "WebURL").Value; 
      var wind = doc.Element(ns + "weather").Element(ns + "wind-speed").Value; 

你也可以使用LINQ:

XDocument doc = XDocument.Load("http://api.wxbug.net/getLiveCompactWeatherRSS.aspx?ACode=A5333948364&zipcode=80918&unittype=0&OutputType=1"); 
      XNamespace ns = "http://www.aws.com/aws"; 
      var v = from d in doc.Elements(ns + "weather") select new { WebUrl = d.Element(ns + "WebURL").Value, WindSpeed = d.Element(ns + "wind-speed").Value}; 
      foreach (var c in v) 
      { 
       Console.WriteLine(c.WebUrl + "--" + c.WindSpeed); 
      } 
+0

这似乎轻松了许多。任何想法为什么原来的程序员去了System.Data.DataSet? 我注意到在.Net中编码很多。有一件事我注意到有很多方法可以做同样的事情。可能太多了。 :)也似乎有很多方法和属性与一个对象。可能太多了。 :) – 2012-04-22 13:26:26

+0

我理解使用数据集的原因是它可以绑定到一个控件?那么为什么数据不是以某种合理的方式加载的呢?这似乎到处都是。 – 2012-04-22 13:47:11

+0

我可能会使用普通的基于C#的模型而不是DataSet,这样我甚至可以根据需要添加行为。 – ninja 2012-04-22 14:10:55