【问题标题】:XmlDocument ReplacementXmlDocument 替换
【发布时间】:2015-03-19 05:33:35
【问题描述】:

有人知道在 .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%,风 W 18 公里/小时)

【问题讨论】:

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


【解决方案1】:

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

【讨论】:

  • 不幸的是,如果您通过 URL 查看 rss 提要,您会发现我并不是在寻找文档中的第一个描述元素。必须是第一个频道/项目元素
  • 编辑了我的问题,使其更容易理解。 xml 文件中有多个描述元素,但我没有在文档中查找第一个描述元素
  • 查看我的编辑,这只是一个示例。您也可以轻松地循环读取检查每个元素。
【解决方案2】:

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

您似乎正在寻找第一个 channel/item/description 元素。您应该能够使用Stack 来跟踪您的位置,就像您通过阅读器Read 一样。

作为一个粗略的大纲,只要当前的NodeTypeXmlNodeType.Element,就将LocalName 压入堆栈,并在它是EndElement 的时候弹出。当它是一个元素时,检查stack.ToArray() 是否匹配{"description", "item", "channel"}。如果是,则您已找到要查找的节点,因此请获取阅读器的 Value 属性。

【讨论】:

  • 不幸的是无法调用堆栈,但我发现了以下内容:WeatherXML.Read(); while (WeatherXML.Read()) { if (WeatherXML.Name == "title" &amp;&amp; WeatherXML.ReadString() == "Current Weather") { rightstring = true; } else if (WeatherXML.Name == "description" &amp;&amp; rightstring == true) { currCond = WeatherXML.ReadString(); rightstring = false; } else rightstring = false; }
  • 现在我必须找到一种将“ISO-8859-1”转换为“UTF-8”的方法,哈哈
猜你喜欢
  • 1970-01-01
  • 2011-10-19
  • 2010-09-06
  • 1970-01-01
  • 1970-01-01
  • 2011-01-13
  • 1970-01-01
  • 1970-01-01
  • 2011-01-25
相关资源
最近更新 更多