2011-12-29 41 views
0

我正在使用Windows Phone 7處理應用程序,該應用程序顯示來自特定URI的數據,但它不起作用。我是堆棧,請幫助我。這是我的XML:解析Windows Phone7的問題

<rss version="2.0"> 
    <channel> 
     <title>info</title> 
     <link>http://www.info.net</link> 
     <description>Trouvez toutes les actualités en direct sur info.net ...</description> 
     <language>fr</language> 
     <copyright></copyright> 
     <pubDate></pubDate> 
     <image> 
      <url></url> 
      <title></title> 
      <link>http://www.info.net</link> 
      <width>200</width> 
      <height>200</height> 
      </image> 
    <item> 
<title>Actualités » Info News » News Régionales : Main info</title> 
    <link>http://www.info.net/fr/actualite/actualites_info-news_news-regionales/my-main-info/54</link> 
    <pubDate>Thu, 29 Dec 2011 00:22:00 +0100</pubDate> 
    <description><![CDATA[<img align='left' width='139' src='http://www.info.net/uploads/content/thumbnails/2011122902313__news.jpg'> My main info details : ...]]></description> 
</item><item> 
    . 
    . 
    . 
     </item></channel></rss> 

,我想以顯示包含列表:

Main info (title) 
http://www.info.net/uploads/content/thumbnails/2011122902313__news.jpg (description) 
My main info details (description) 

這是我的C#代碼:

var doc = XDocument.Load(new StringReader(e.Result)); 
      var items = from c in doc.Descendants("item") 
        select new RSSitem() 
        { 
         Title = c.Element("title").Value, 
         Photo = c.Element("img").Attribute("src").Value, 
         Description = c.Element("description").Value, 
         Link = c.Element("link").Value, 
        }; 
      ListBoxNews.ItemsSource = items; 
+0

什麼沒有按」 T工作?它不編譯?它不顯示任何東西嗎?它顯示錯誤/不完整/太多? – Yahia 2011-12-29 10:58:26

+0

它只顯示標題:( – MarTech 2011-12-29 11:19:59

+0

注意,我建議在你的LINQ查詢的末尾添加一個'ToList';否則如果ListBox刷新它的項目,查詢將被重新評估 – 2011-12-29 22:10:59

回答

-1

對C數據節點類似

XmlNode cDataNode = doc.SelectSingleNode("channel/description").ChildNodes[0]; 

string finalData = cDataNode.Inner Text.Trim();

+0

請問您是否更加明確請 – MarTech 2011-12-29 12:13:30

+0

您只能獲取標題,因爲您正在提取圖片和說明propery是不相關的,在描述節點中沒有屬性src,並且可以使用類似於代碼代碼的Description屬性獲取CDATA – 2011-12-29 12:29:54

+0

他所說的是描述元素中的內容是類似於XML的文本,但不能將xpath查詢放入CDATA中 – 2011-12-29 19:53:33

0

<img>標記不是您的XML文檔的一部分,而是描述元素的CDATA節點中的一個HTML元素。

要提取它,您需要使用HtmlAgilityPackNuGet上的HtmlAgilityPack)。

這裏是你的代碼的更新版本:

(我轉換您的LINQ表達式中使用擴展方法爲順序碼不LINQ表達式很好地工作)

var items = doc.Descendants("item") 
       .Select(c => 
       { 
        string descriptionHtml = c.Element("description").Value; 
        HtmlDocument descriptionDoc = new HtmlDocument(); 

        descriptionDoc.LoadHtml(descriptionHtml); 

        HtmlNode imageNode = doc.DocumentNode.SelectSingleNode("//img[@src]"); 

        string imageUrl = (imageNode != null) 
         ? imageNode.GetAttributeValue("src", null) 
         : null; 

        // This might need further looking at, depending on your HTML 
        string description = doc.DocumentNode.InnerText; 

        return new RSSitem() 
        { 
         Title = c.Element("title").Value, 
         Photo = imageUrl, 
         Description = description, 
         Link = c.Element("link").Value, 
        }; 

       }).ToList(); 
+0

我確實下載了Html Agility Pack,但無法添加它作爲一個新的參考。 – MarTech 2011-12-29 22:49:18

+0

@MarTech - 你需要WP版本,由於某種原因只有avai通過[NuGet]標籤(http://www.nuget.org)。你應該在VS的Express版本上安裝NuGet,然後添加一個「包引用」(通過右鍵單擊引用)並找到'HtmlAgilityPack'。 – 2011-12-30 08:19:58

+0

我是否應該在Windows SDK中找到HtmlAgilityPack,當我必須添加它作爲參考? – MarTech 2011-12-30 16:02:03