2014-09-19 3 views
2

Я пытаюсь показать информацию о погоде на своем веб-сайте из мировой погоды в Интернете. Я использую VS2012 с C# для создания этого.Как преобразовать тип XMLDocument в строку, чтобы показать результат в ярлыке

Я смог получить данные из мировой погоды в режиме онлайн с помощью переменной типа XMLDocument «WP_XMLdoc».

Взгляните на приведенный ниже код:

public static XmlDocument WeatherAPI(string sLocation) 
{ 
    HttpWebRequest WP_Request; 
    HttpWebResponse WP_Response = null; 
    XmlDocument WP_XMLdoc = null; 
    String Value; 

    string sKey = "xxxxxxxxxxxxxxxxxxxxxxxxx"; //The API key generated by World Weather Online 
    string sRequestUrl = "http://api.worldweatheronline.com/free/v1/weather.ashx?format=xml&"; //The request URL for XML format 

    try 
    { 
     //Here we are concatenating the parameters 
     WP_Request = (HttpWebRequest)WebRequest.Create(string.Format(sRequestUrl + "q=" + sLocation + "&key=" + sKey)); 
     WP_Request.UserAgent = @"Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.8.1.4) Gecko/20070515 Firefox/2.0.0.4"; 
     //Making the request 
     WP_Response = (HttpWebResponse)WP_Request.GetResponse(); 
     WP_XMLdoc = new XmlDocument(); 
     //Assigning the response to our XML object 
     WP_XMLdoc.Load(WP_Response.GetResponseStream()); 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine(ex.Message); 
    } 
    WP_Response.Close(); 
    return WP_XMLdoc; 

    } 

} 

Итак, теперь я просто хочу взять данные XML из «WP_XMLdoc» переменной и показать некоторые детали, как temp_c, скорость ветра, время и т.д. в моих лейблов. Как я могу это сделать?

данные XML, которые отдыхают под "WP_XMLdoc" приводится ниже:

<?xml version="1.0" encoding="UTF-8"?> 
<data> 
    <request> 
     <type>City</type> 
     <query>London, United Kingdom</query> 
    </request> 
    <current_condition> 
     <observation_time>04:17 AM</observation_time> 
     <temp_C>17</temp_C> 
     <temp_F>63</temp_F> 
     <weatherCode>143</weatherCode> 
     <weatherIconUrl> 
      <![CDATA[http://cdn.worldweatheronline.net/images/wsymbols01_png_64/wsymbol_0006_mist.png]]> 
     </weatherIconUrl> 
     <weatherDesc> 
      <![CDATA[Mist]]> 
     </weatherDesc> 
     <windspeedMiles>0</windspeedMiles> 
     <windspeedKmph>0</windspeedKmph> 
     <winddirDegree>62</winddirDegree> 
     <winddir16Point>ENE</winddir16Point> 
     <precipMM>0.0</precipMM> 
     <humidity>94</humidity> 
     <visibility>2</visibility> 
     <pressure>1010</pressure> 
     <cloudcover>50</cloudcover> 
    </current_condition> 
    <weather> 
     <date>2014-09-19</date> 
     <tempMaxC>28</tempMaxC> 
     <tempMaxF>82</tempMaxF> 
     <tempMinC>14</tempMinC> 
     <tempMinF>57</tempMinF> 
     <windspeedMiles>5</windspeedMiles> 
     <windspeedKmph>8</windspeedKmph> 
     <winddirection>SSE</winddirection> 
     <winddir16Point>SSE</winddir16Point> 
     <winddirDegree>149</winddirDegree> 
     <weatherCode>356</weatherCode> 
     <weatherIconUrl> 
      <![CDATA[http://cdn.worldweatheronline.net/images/wsymbols01_png_64/wsymbol_0010_heavy_rain_showers.png]]> 
     </weatherIconUrl> 
     <weatherDesc> 
      <![CDATA[Moderate or heavy rain shower]]> 
     </weatherDesc> 
     <precipMM>8.3</precipMM> 
    </weather> 
</data> 

Пожалуйста, помогите!

+0

Как вы хотите, чтобы показать его на этикетке ? Просто дамп вашего XML или значения в каждом узле? – Sam

+0

Если вы посмотрите на код xml. Я просто хочу показать немного информации на экране, например/data/current_condition/temp_c,/data/current_condition/windspeedKmph,/data/current_condition/cloudcover и т. Д. – 2014-09-19 04:40:54

ответ

1

Если предположить, что существующий код успешно загрузить данные XML в XmlDocument объекта, мы можем использовать SelectSingleNode() проходящие подходящее выражение XPath в качестве аргумента, чтобы получить какую-либо конкретную часть документа XML. Например, чтобы получить <temp_C> значение:

string temp_c = WP_XMLdoc.SelectSingleNode("/data/current_condition/temp_C") 
         .InnerText; 

Другой вариант заключается в использовании более новый XML API, XDocument. Он имеет Load() метод, функциональность аналогична XmlDocument.Load():

XDocument WP_XMLdoc = XDocument.Load(WP_Response.GetResponseStream()); 

Используя этот подход, мы можем просто бросить XElement к string, чтобы получить это значение:

string temp_c = (string)WP_XMLdoc.XPathSelectElement("/data/current_condition/temp_C"); 
+0

Спасибо все прояснилось .... :) – 2014-09-19 07:30:15

0

попробовать что-то вроде этого, как пример:

var str = @"<your xml here>"; 
XDocument xdoc = XDocument.Parse(str); 
var output = new List<string>(); 

foreach (var element in xdoc.Element("data").Element("current_condition").Elements()) 
{ 
    output.Add(string.Format("{0} : {1}",element.Name, element.Value.ToString())); 
} 

Это траверс свойства узла current_condition, вы можете настроить по мере необходимости, чтобы извлечь то, что вам нужно.

+0

Значения xml покоятся под WP_XMLdoc. Есть ли способ извлечь из этого ценность или преобразовать WP_XMLdoc в строку и взять требуемое значение из него и показать в метке? – 2014-09-19 05:32:49

0

Хорошо, в соответствии с вашим ответом в комментариях, я считаю, вам нужно показать несколько столбцов данных.

Лучшим вариантом было бы использовать GridView для заполнения ваших данных с использованием ADO.net. Это немного легко.

Посмотри this SO thread

+0

Нет, не так .... Я просто хочу показать несколько значений из XML в нужную метку. Я хочу, чтобы некоторые, как это: lblTemp.Text = XMLDoc.GetElementsByTagName.temp_c lblwind.Text = XMLDoc.GetElementsByTagName.windspeed_kmph – 2014-09-19 05:26:14

 Смежные вопросы

  • Нет связанных вопросов^_^