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 °C , Humidity 72% , Wind W 18km/h</description>
</item>`
我需要最后的描述(阴天,-1°C,湿度 72%,风速 18 公里/小时)
您应该能够从 XmlTextReader
对象中获取数据,但您需要跟踪您在文档中的位置。
您似乎在寻找第一个 channel/item/description
元素。在 Read
通过 reader 时,您应该能够使用 Stack
来跟踪您的位置。
作为一个粗略的轮廓,当当前 NodeType
为 XmlNodeType.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());
}
}
有人知道在 .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 °C , Humidity 72% , Wind W 18km/h</description>
</item>`
我需要最后的描述(阴天,-1°C,湿度 72%,风速 18 公里/小时)
您应该能够从 XmlTextReader
对象中获取数据,但您需要跟踪您在文档中的位置。
您似乎在寻找第一个 channel/item/description
元素。在 Read
通过 reader 时,您应该能够使用 Stack
来跟踪您的位置。
作为一个粗略的轮廓,当当前 NodeType
为 XmlNodeType.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());
}
}