2015-01-20 70 views
0

任何人都知道在.NET微型框架中執行XMLDocument的另一種方式?顯然,我無法創建一個XmlDocument對象,所以我需要找到一個合適的替代品。另外,我也無法創建一個XmlNode對象。XmlDocument替換

我想要做的是當按下按鈕時從互聯網上的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公里每小時)

+1

我不認爲你會找到一種方法來加載整個由於內存限制,.NET微內存中的XML文檔。他們似乎提供了可用於解析文檔的XmlReader類:https://msdn.microsoft.com/en-us/library/ee437373.aspx – 2015-01-20 21:26:50

回答

0

您應該能夠從您的XmlTextReader對象獲取數據,但您需要跟蹤您在文檔中的位置。

看起來您正在尋找第一個channel/item/description元素。您應該可以使用Stack通過閱讀器跟蹤您的位置,如Read

粗略地說,每當當前NodeTypeXmlNodeType.Element時,將LocalName推送到堆棧上,並且在其爲EndElement時彈出。當它是一個元素時,檢查stack.ToArray()是否匹配{"description", "item", "channel"}。如果是這樣,你找到了你正在尋找的節點,所以請閱讀讀者的Value屬性。

+0

不幸的是不能調用堆棧,但是我發現了以下內容: 'WeatherXML.Read();如果(WeatherXML.Name ==「title」&& WeatherXML.ReadString()==「Current Weather」) {0121},則返回 { }如果(WeatherXML.Read()) { 如果(WeatherXML.Name ==「description」&& rightstring == true) { currCond = WeatherXML.ReadString(); rightstring = false; } else rightstring = false; }' – Termonator145 2015-01-21 00:15:31

+0

現在我必須找到一種方法來從「ISO-8859-1」轉換爲「UTF-8」lol – Termonator145 2015-01-21 00:18:14

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

不幸的是,如果你看看通過URL的rss feed,你會看到我我沒有完全查找文檔中的第一個描述元素。必須是第一個通道/項目元素 – Termonator145 2015-01-21 00:13:58

+0

的孩子編輯了我的問題,以使它更容易理解。在xml文件中有多個描述元素,但我沒有在文檔中尋找第一個元素 – Termonator145 2015-01-21 01:39:14

+0

請參閱我的編輯,這只是一個示例。您也可以輕鬆地遍歷讀取檢查每個元素。 – 2015-01-21 11:59:55