c# - 如何解析 XML 数据以检索子节点值?

标签 c# xml silverlight xml-parsing

我确实有一个 xml 文件位于:http://api.wunderground.com/api/adaebe40743a9ca6/geolookup/conditions/forecast/q/India/Pilani.xml

现在我想获取 temp_c, relative_humidity, wind_string 的值。

为此我创建了一个 WeatherReader.cs 类

using System;
using System.Net;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Xml;

namespace CNGS
{
    public class WeatherReader
    {   public int Temp;
        public string Humidity;
        public string Wind;
        public string place;

        private void PopulateWeatherData()
        {
            XmlReader reader = XmlReader.Create("http://api.wunderground.com/api/adaebe40743a9ca6/geolookup/conditions/forecast/q/India/Pilani.xml");

            reader.MoveToContent();            

            while (reader.Read())
            {
                if (reader.LocalName == "temp_c")
                {
                    Temp = Convert.ToInt32(reader.Value);
                }
if (reader.LocalName == "relative_humidity")
                {
                    Humidity=reader.Value;
                }
if (reader.LocalName == "wind_string")
                {
                    Wind= reader.Value;
                }


            }

            reader.Close();
        }
    }
}

是否正确,是否会获取所需的值?

现在,因为我想在 silverlight 页面中显示此信息。我试图创建一个 weatherreader 类的对象作为

WeatherReader Weath = new WeatherReader();

但我不知道如何获取温度、风值等? int tmp = Weath.Temp 之类的东西都不起作用。

请帮忙

我想获取天气数据,然后在 MainPage 上的 silverlight 控件中使用它,以显示实时天气报告。

谢谢

最佳答案

不,这不是您使用 XmlReader 阅读文档的方式。它比这复杂得多,事实上……太复杂了。

您最好为此使用 LINQ to XML,因为它会简单得多。

var xml = "http://api.wunderground.com/api/adaebe40743a9ca6/geolookup/conditions/forecast/q/India/Pilani.xml";
var doc = XDocument.Load(xml);
var currentObservation = doc.Element("response").Element("current_observation");
var temp = (int)currentObservation.Element("temp_c");
var humidity = (string)currentObservation.Element("relative_humidity");
var wind = (string)currentObservation.Element("wind_string");

如果您想使用 XmlReader,那么您必须执行如下操作:

var xml = "http://api.wunderground.com/api/adaebe40743a9ca6/geolookup/conditions/forecast/q/India/Pilani.xml";
using (var reader = XmlReader.Create(xml))
{
    var temp = default(int);
    var humidity = default(string);
    var wind = default(string);

    string elementName = null;
    while (reader.Read())
    {
        switch (reader.NodeType)
        {
        case XmlNodeType.Element:
            elementName = reader.Name;
            break;
        case XmlNodeType.Text:
            switch (elementName)
            {
            case "temp_c":
                temp = reader.ReadContentAsInt();
                break;
            case "relative_humidity":
                humidity = reader.ReadContentAsString();
                break;
            case "wind_string":
                wind = reader.ReadContentAsString();
                break;
            }
            elementName = null;
            break;
        }
    }
}

关于c# - 如何解析 XML 数据以检索子节点值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10264323/

相关文章:

c# - Accumulo createBatchScanner 范围未按预期工作

c# - 将 Windows 服务转变为 Web 应用程序核心服务?

c# - 在 Entity Framework 中更改数据库结构和移动数据

java - Android Studio 0.8.10资源问题

xml - 可以处理大文件的轻量级 XML 查看器

silverlight - 在 XAML 中的一个 TextBlock 中格式化多个绑定(bind)字段

c# - 如何在 excel csv 文件中添加两个表?

xml - AUTOSAR标准中如何确定ARXML文件是CAN网络还是以太网网络

c# - 双向绑定(bind)设置问题

c# - Silverlight:在页面之间传递复杂对象