XmlDocument替换

时间:2015-01-20 20:35:16

标签: c# xml .net-micro-framework

任何人都知道在.NET微框架中执行XMLDocument的另一种方式吗?显然,我无法创建一个XmlDocument对象,所以我需要找到一个合适的替代品。此外,我也无法创建XmlNode对象。

我想要做的是在按下按钮时从互联网上获取rss天气预报(XML)中的信息。

//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&nbsp;&deg;C   , Humidity  72% , Wind  W 18km/h</description>
        </item>`

我需要最后的描述(阴天,-1°C,湿度72%,风速18公里/小时)

2 个答案:

答案 0 :(得分:0)

您应该能够从XmlTextReader对象获取数据,但是您需要跟踪文档中的位置。

看起来你正在寻找第一个channel/item/description元素。您应该可以使用StackRead通过阅读器跟踪您的位置。

作为粗略轮廓,只要当前LocalNameNodeType,就将XmlNodeType.Element推入堆栈,并在EndElement时弹出。stack.ToArray()。如果是元素,请检查{"description", "item", "channel"}是否与Value匹配。如果是,您找到了您正在寻找的节点,那么请使用阅读器的{{1}}属性。

答案 1 :(得分:0)

要扩展我的评论,请查看XmlReader的定义。如果您想获得第一个描述元素的值,可以使用以下代码轻松获取它(原样):

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());
    }
}