C# 使用节点的5天预测
我已经设置了一个程序来获取我的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]=(文本);C# 使用节点的5天预测,c#,xml,C#,Xml,我已经设置了一个程序来获取我的1天晴朗天气,但是我不知道如何获取其他4天的信息,因为在xml文件中,所有的天都有相同的名称。如何访问不同日期的信息 我正在使用的Xml 代码: 我通过将值赋给这样的数组并使用一些这样的代码来解决这个问题 var fiveDays=channel.SelectSingleNode(“项目”).SelectNodes(“天气:预测”,管理器); foreach(五天内的XmlNode节点) { var day=node.Attributes[“day”].Value;
感谢您的帮助!这将为您收集未来几天的信息,然后您可以循环查看这些信息以获取每天的详细信息:
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;
}