Xml文档替换

XmlDocument Replacement

有人知道在 .NET 微型框架中制作 XML文档的另一种方法吗?显然,我无法创建 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 公里/小时)

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

您似乎在寻找第一个 channel/item/description 元素。在 Read 通过 reader 时,您应该能够使用 Stack 来跟踪您的位置。

作为一个粗略的轮廓,当当前 NodeTypeXmlNodeType.Element 时,将 LocalName 压入堆栈,并在 EndElement 时弹出。当它是一个元素时,检查 stack.ToArray() 是否匹配 {"description", "item", "channel"}。如果是,则您已找到要查找的节点,因此取 reader.

Value 属性

要扩展我的评论,请查看 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());
    }
}