【问题标题】:Parse Weather Forecast Data (from the NDFD) in c#在 c# 中解析天气预报数据(来自 NDFD)
【发布时间】:2011-06-07 10:58:39
【问题描述】:

我正在使用 > http://www.weather.gov/forecasts/xml/DWMLgen/wsdl/ndfdXML.wsdl webservice 通过调用 GmlTimeSeries webmethod 来获取天气详细信息。现在我只想从 xml 中读取温度、天气图标链接详细信息。 xml 有大量数据。任何人都可以提出从 xml 中获取所需数据的想法吗?

NDFD HOme Page

XML 如下所示:Full XML File is Here

我想从下面的 xml 数据中获取温度:

 <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 中读取温度和天气状况。

Full XML File is Here

【问题讨论】:

  • 我尝试使用 XDocument.Parse() 方法解析 xml。但无法阅读&lt;app:temperature&gt;

标签: c# xml weather-api


【解决方案1】:

我想你会找到答案here

编辑: 你需要使用命名空间,例如:

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" )

【讨论】:

  • 我尝试了给定链接中解释的方式,但无法像那样阅读它
  • ` var getTemp = from i in XDocument.Parse(strResult).Descendants("Forecast_Gml2Point") select i.Element("temperature"); `...我收到“枚举未产生结果”错误
  • 您发布的xml示例已满?我缺少根部分。如果您发布所有 xml(strResult 内容),或者显示您从哪里获得它,我至少可以尝试测试。
  • @Reniuz :我编辑了我的问题以提供完整的 XML 文件。请在问题的底部得到它。
  • 此响应来自网络服务。
【解决方案2】:

如果您使用 Visual Studio 的“添加 Web 引用”功能会更容易。通过这种方式,Visual Studio 会根据 WSDL 为您生成所有(代理)类,然后您可以像平常一样对这些类进行编程。换句话说,不需要解析 XML。

正如this link中指出的:

Visual Studio.Net Web 引用是在客户端创建的代理类,用于连接到服务器上运行的 Web 服务。在 IDE Web 引用内部会自动生成代码并将隐藏文件插入到您的项目中。这是必需的,因为 .Net 是类型安全的,并且为了编译使用 Web 服务的代码,客户端必须知道被调用的每个方法的方法签名。

您可能想参考the above link 了解有关使用 WSDL 的详细信息。

【讨论】:

  • 我只以这种方式使用网络服务。这里 web 服务的 webmethod 以我在问题中提供的 XML 格式给出响应。
  • 如果是这种情况,如果您使用的 .Net 版本支持它,我建议您使用 LINQ to XML...LINQ to XML 提供有用的类,例如 XElement,可让您快速解析 XML 文档...msdn.microsoft.com/en-us/library/bb299195(v=VS.100).aspx...
  • 看看上面@Reniuz给出的答案。你会得到我想要的
猜你喜欢
  • 1970-01-01
  • 2011-11-15
  • 2013-10-25
  • 2017-01-12
  • 2012-11-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-16
  • 1970-01-01
相关资源
最近更新 更多