Анализ данных прогноза погоды (из NDFD) в c # - PullRequest
1 голос
/ 07 июня 2011

Я использую веб-службу> http://www.weather.gov/forecasts/xml/DWMLgen/wsdl/ndfdXML.wsdl, чтобы получить данные о погоде, вызывая веб-метод GmlTimeSeries.Теперь я просто хочу прочитать temparature, подробности ссылки на значок погоды из XML.XML имеет огромные данные.Кто-нибудь может дать идею получить необходимые данные из xml?

Страница NDFD HOme

XML выглядит примерно так: Полный файл XML находится здесь

Я хочу получить данные Temparature снизу 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.

Полный файл XML здесь

Ответы [ 2 ]

3 голосов
/ 07 июня 2011

Я думаю, вы найдете ответ здесь

Edit: вам нужно использовать пространство имен, например:

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: если вам нужно получить элемент с другим пространством имен, вот еще один пример:

XNamespace gml ="http://www.opengis.net/gml"
i.Element(gml+"coordinates" )
1 голос
/ 07 июня 2011

Было бы проще, если бы вы использовали функцию «Добавить веб-ссылку» в Visual Studio. Таким образом, Visual Studio генерирует все (прокси) классы для вас на основе WSDL, и затем вы можете программировать на классы, как обычно. Другими словами, синтаксический анализ XML не требуется.

Как указано в этой ссылке :

Веб-ссылки Visual Studio.Net - это прокси-классы, созданные на клиенте для подключения к веб-службе, работающей на сервере. Внутри IDE веб-ссылки автоматически генерируют код и вставляют скрытые файлы в ваш проект. Это необходимо, потому что .Net является типобезопасным, и для компиляции кода, использующего веб-службу, клиент должен знать сигнатуру метода каждого вызываемого метода.

Возможно, вы захотите обратиться к вышеуказанной ссылке о потреблении WSDL в деталях.

...