C# 使用节点的5天预测

C# 使用节点的5天预测,c#,xml,C#,Xml,我已经设置了一个程序来获取我的1天晴朗天气,但是我不知道如何获取其他4天的信息,因为在xml文件中,所有的天都有相同的名称。如何访问不同日期的信息 我正在使用的Xml 代码: 我通过将值赋给这样的数组并使用一些这样的代码来解决这个问题 var fiveDays=channel.SelectSingleNode(“项目”).SelectNodes(“天气:预测”,管理器); foreach(五天内的XmlNode节点) { var day=node.Attributes[“day”].Value;

我已经设置了一个程序来获取我的1天晴朗天气,但是我不知道如何获取其他4天的信息,因为在xml文件中,所有的天都有相同的名称。如何访问不同日期的信息

我正在使用的Xml

代码:

我通过将值赋给这样的数组并使用一些这样的代码来解决这个问题

var fiveDays=channel.SelectSingleNode(“项目”).SelectNodes(“天气:预测”,管理器); foreach(五天内的XmlNode节点) { var day=node.Attributes[“day”].Value; dayarray[i]=(天); // var text=node.Attributes[“text”].Value; text数组[i]=(文本);
感谢您的帮助!

这将为您收集未来几天的信息,然后您可以循环查看这些信息以获取每天的详细信息:

var upcomingDays = channel.SelectSingleNode("item").SelectNodes("yweather:forecast", manager);

foreach(XmlNode d in upcomingDays)
{
    //d.Attributes["day"].Value;
}

我在LINQPad中运行了这个程序,它运行得很好。

如果使用像and类这样的反序列化器,这会容易得多。使用以下类:

[XmlRoot("rss")]
public class RssRoot
{
    [XmlElement("channel")]
    public Channel Channel { get; set; }
}
public class Channel
{
    [XmlElement("item")]
    public Item Item { get; set; }
    // add other properties, if relevant
}
public class Item
{
    [XmlElement("title")]
    public string Title { get; set; }
    [XmlElement("forecast", Namespace="http://xml.weather.yahoo.com/ns/rss/1.0")]
    public List<Forecast> Forecasts { get; set; }
    // add other properties, if relevant
}
public class Forecast
{
    [XmlAttribute("text")]
    public string Text { get; set; }
    // add other attributes, if relevant
}

如果要继续使用
XmlDocument
处理XML,应使用获取多个
forecast
节点,而不是获取单个节点。

我相信可以使用XmlNode.SelectNodes方法而不是SelectSingleNode

这将返回一个列表,然后您可以遍历该列表并将值复制到需要它们的位置

var fiveDays = channel.SelectSingleNode("item").SelectNodes("yweather:forecast", manager);
foreach (XmlNode node in fiveDays)
{
    var text = node.Attributes["text"].Value;
    var high = node.Attributes["high"].Value;
    var low = node.Attributes["low"].Value;
}

或者,您可以使用xpath
wData.SelectNodes(“channel/item//yweather:forcast”,manager)
返回XmlNodeList。@LeeHiles是的,但我想我会保持OP的结构方式
string query = "http://weather.yahooapis.com/forecastrss?w=2473224";
using (var reader = XmlReader.Create(query))
{
    var ser = new XmlSerializer(typeof(RssRoot));
    var rss = (RssRoot)ser.Deserialize(reader);
    // use rss
}
var fiveDays = channel.SelectSingleNode("item").SelectNodes("yweather:forecast", manager);
foreach (XmlNode node in fiveDays)
{
    var text = node.Attributes["text"].Value;
    var high = node.Attributes["high"].Value;
    var low = node.Attributes["low"].Value;
}