C# XML文档替换
有人知道在.NET micro framework中处理XML文档的另一种方法吗?显然,我无法创建XmlDocument对象,因此我需要找到合适的替代对象。此外,我也不能创建XmlNode对象 我想做的是,当按下按钮时,从互联网上的rss天气提要(XML)中获取信息C# XML文档替换,c#,xml,.net-micro-framework,C#,Xml,.net Micro Framework,有人知道在.NET micro framework中处理XML文档的另一种方法吗?显然,我无法创建XmlDocument对象,因此我需要找到合适的替代对象。此外,我也不能创建XmlNode对象 我想做的是,当按下按钮时,从互联网上的rss天气提要(XML)中获取信息 //Grab wather data and display useful information. System.Xml.XmlTextReader WeatherXML = new System.Xml.XmlTextReade
//Grab wather data and display useful information.
System.Xml.XmlTextReader WeatherXML = new System.Xml.XmlTextReader(http://rss.theweathernetwork.com/weather/caab0211);
System.Xml.XmlDocument doc = new XmlDocument();
doc.Load(http://rss.theweathernetwork.com/weather/caab0211);
XmlNode node = doc.DocumentElement.SelectSingleNode("/rss/channel/item");
string attr = (node.LastChild.InnerText);
XML文档:
`<rss version="2.0">
<channel>
<title>The Weather Network - Medicine Hat, Alberta</title>
<link>http://www.theweathernetwork.com/weather/caab0211?</link>
<description>The Weather Network - ...</description>
<copyright>copyright stuff</copyright>
<language>en-us</language>
<image>...</image>
<image>...</image>
<item>
<title>Current Weather</title>
<guid>http://www.theweathernetwork.com/weather/caab0211?ref=current_obs</guid>
<link>http://www.theweathernetwork.com/weather/caab0211?ref=current_obs</link>
<pubDate>Tue, 20 Jan 2015 11:45:00 -0500</pubDate>
<description>Overcast, -1 °C , Humidity 72% , Wind W 18km/h</description>
</item>`
`
天气网络-医疗帽,阿尔伯塔省
http://www.theweathernetwork.com/weather/caab0211?
气象网-。。。
版权材料
美国英语
...
...
当前天气
http://www.theweathernetwork.com/weather/caab0211?ref=current_obs
http://www.theweathernetwork.com/weather/caab0211?ref=current_obs
2015年1月20日星期二11:45:00-0500
阴天-1度;C,湿度72%,风速18km/h
`
我需要最后的描述(阴天,-1°C,湿度72%,风速18km/h)您应该能够从
XmlTextReader
对象获取数据,但您需要跟踪文档中的位置
看起来您正在查找第一个channel/item/description
元素。当您通过读卡器读取时,应该能够使用堆栈跟踪您的位置
大致来说,只要当前的NodeType
是XmlNodeType.Element
,就将LocalName
推到堆栈上,只要是EndElement
就弹出。当它是一个元素时,检查stack.ToArray()
是否匹配{“description”、“item”、“channel”}
。如果是,则您已经找到了要查找的节点,因此请使用读取器的值属性。要展开我的评论,请查看的定义。如果要获取第一个描述元素的值,可以使用以下代码(原样)轻松获取该值:
由于内存限制,我认为您无法将整个XML文档加载到.NETMicro的内存中。它们确实提供了可以用来解析文档的XmlReader类,但是:不幸的是,如果您通过URL查看rss提要,您会发现我并不是在寻找文档中的第一个描述元素。。必须是第一个频道/项目元素的子元素编辑我的问题以使其更容易理解。xml文件中有多个描述元素,但我不是在寻找文档中的第一个元素。请看我的编辑,这只是一个示例。您也可以轻松地循环读取检查每个元素。不幸的是,无法调用堆栈,但我发现了以下内容:WeatherXML.read();while(WeatherXML.Read()){if(WeatherXML.Name==“title”&&WeatherXML.ReadString()=“Current Weather”){rightstring=true;}else if(WeatherXML.Name==“description”&&rightstring==true){currCond=WeatherXML.ReadString();rightstring=false;}否则rightstring=false;}
private static void Main(string[] args)
{
using (var xmlReader = XmlReader.Create("http://rss.theweathernetwork.com/weather/caab0211"))
{
xmlReader.ReadToFollowing("item");
xmlReader.ReadToFollowing("description");
Console.WriteLine(xmlReader.ReadElementString());
}
}