在c#中解析天气预报数据(来自NDFD)
本文关键字:来自 NDFD 数据 天气预报 | 更新日期: 2023-09-27 17:58:38
我正在使用>http://www.weather.gov/forecasts/xml/DWMLgen/wsdl/ndfdXML.wsdlwebservice,通过调用GmlTimeSeries Web方法获取天气详细信息。现在我只想阅读xml中的temparature、天气图标链接的详细信息。xml包含大量数据。有人能想到从xml中获取所需的数据吗?
NDFD HOme页面
XML看起来几乎如下:完整的XML文件在这里
我想从下面的xml数据中获取Temparature:
<gml:featureMember>
<app:Forecast_Gml2Point>
<gml:position>
<gml:Point srsName="EPSG:4326">
<gml:coordinates>-87.8859170,41.7450495</gml:coordinates>
</gml:Point>
</gml:position>
<app:validTime>2011-06-07T12:00:00</app:validTime>
<app:temperature>77.0</app:temperature>
</app:Forecast_Gml2Point>
</gml:featureMember>
<gml:featureMember>
<app:Forecast_Gml2Point>
<gml:position>
<gml:Point srsName="EPSG:4326">
<gml:coordinates>-87.8859170,41.7450495</gml:coordinates>
</gml:Point>
</gml:position>
<app:validTime>2011-06-07T15:00:00</app:validTime>
<app:temperature>90.0</app:temperature>
</app:Forecast_Gml2Point>
</gml:featureMember>
下面的天气短语:
<gml:featureMember>
<app:Forecast_Gml2Point>
<gml:position>
<gml:Point srsName="EPSG:4326">
<gml:coordinates>-87.8859170,41.7450495</gml:coordinates>
</gml:Point>
</gml:position>
<app:validTime>2011-06-08T03:00:00</app:validTime>
<app:weatherPhrase>Mostly Clear</app:weatherPhrase>
</app:Forecast_Gml2Point>
</gml:featureMember>
<gml:featureMember>
<app:Forecast_Gml2Point>
<gml:position>
<gml:Point srsName="EPSG:4326">
<gml:coordinates>-87.8859170,41.7450495</gml:coordinates>
</gml:Point>
</gml:position>
<app:validTime>2011-06-08T06:00:00</app:validTime>
<app:weatherPhrase>Mostly Clear</app:weatherPhrase>
</app:Forecast_Gml2Point>
</gml:featureMember>
上面是一个xml文件。像这样,我有7天的大数据天气细节。我需要从上面的xml中读取温度和天气条件。
完整的XML文件在这里
我想你会在这里找到答案
编辑:您需要使用名称空间,例如:
XNamespace app = "http://www.weather.gov/forecasts/xml/OGC_services";
var result = from i in doc.Descendants(app+"Forecast_Gml2Point")
select new
{
temperature = i.Element(app + "temperature"),
icon = i.Element(app+"weatherIcon")
};
编辑2:如果您需要使用其他名称空间获取Element,这里有另一个示例:
XNamespace gml ="http://www.opengis.net/gml"
i.Element(gml+"coordinates" )
如果使用Visual Studio的"添加Web引用"功能,会更容易。通过这种方式,VisualStudio为您生成了基于WSDL的所有(代理)类,然后您就可以像往常一样针对这些类进行编程。换句话说,不需要对XML进行解析。
如本链接所述:
Visual Studio.Net Web引用是在客户端上创建的代理类,用于连接到服务器上运行的Web服务。IDE内部的Web引用会自动生成代码并将隐藏文件插入到项目中。这是必需的,因为.Net是类型安全的,并且为了编译使用Web服务的代码,客户端必须知道被调用的每个方法的方法签名。
您可能需要详细参考上面关于使用WSDL的链接。