2009-09-13 113 views
1

試圖讀取一個RSS和使用Linq選擇信息,但似乎無法得到它的工作。RSS訂閱麻煩w/Linq

這裏是我的代碼:

XDocument feedXML = XDocument.Load(
     "http://eventful.com/atom/performers/bliminal-/P0-001-000192452-0"); 

     var feeds = from feed in feedXML.Descendants("entry") 
        select new 
        { 
         Title = feed.Element("title").Value, 
         Link = feed.Element("link").Value, 
         Description = feed.Element("content").Value 
        }; 

這裏是我的RSS格式:

<?xml version="1.0" encoding="UTF-8"?>  
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US" xmlns:g="http://base.google.com/ns/1.0" xmlns:gd="http://schemas.google.com/g/2005" xmlns:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml" xmlns:media="http://search.yahoo.com/mrss/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"> 
    <id>http://eventful.com/atom/performers/bliminal-/P0-001-000192452-0</id> 
    <link href="http://eventful.com/atom/performers/bliminal-/P0-001-000192452-0" type="application/atom+xml" rel="self" /> 
    <link href="http://eventful.com/performers/bliminal-/P0-001-000192452-0" type="text/html" rel="alternate" /> 
    <title>B-Liminal Tour Dates in 2009, B-Liminal Concert Schedule - Eventful</title> 
    <subtitle>Up-to-date event feeds from eventful.com, the world's leading event website.</subtitle> 
    <rights type="xhtml"> 
    <div xmlns="http://www.w3.org/1999/xhtml"> 
     Copyright &#169; 2006 
     <a href="http://eventful.com/">Eventful, Inc.</a> All rights reserved. Use subject to terms of use: 
     <a href="http://eventful.com/terms">http://eventful.com/terms</a> 
    </div> 
    </rights> 
    <generator version="1.0">EVDB::Atom</generator> 
    <opensearch:totalResults></opensearch:totalResults> 
    <opensearch:startIndex>1</opensearch:startIndex> 
    <updated>2009-09-13T11:48:52+00:00</updated> 
    <entry xmlns="http://www.w3.org/2005/Atom" xmlns:g="http://base.google.com/ns/1.0" xmlns:gd="http://schemas.google.com/g/2005" xmlns:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml" xmlns:media="http://search.yahoo.com/mrss/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"> 
    <id>http://eventful.com/jupiter/events/bliminal-free-fan-appreciation-show-/E0-001-024704319-1</id> 
    <published>2009-09-13T15:09:00+00:00</published> 
    <updated>2009-09-13T15:48:12+00:00</updated> 
    <link href="http://eventful.com/jupiter/events/bliminal-free-fan-appreciation-show-/E0-001-024704319-1" type="text/html" rel="alternate" /> 
    <gd:eventStatus value="http://schemas.google.com/g/2005#event.confirmed" /> 
    <gd:visibility value="http://schemas.google.com/g/2005#event.public" /> 
    <gd:transparency value="http://schemas.google.com/g/2005#event.transparent" /> 
    <title>B-Liminal FREE fan appreciation show!</title> 
    <gd:when startTime="2009-09-19T02:00:00+00:00" endTime="2009-09-19T02:00:00+00:00" /> 
    <georss:where> 
     <gml:Point> 
     <gml:pos>26.9342076 -80.0922588</gml:pos> 
     </gml:Point> 
    </georss:where> 
    <gd:where rel="http://schemas.google.com/g/2005#event" valueString="Corners near 71 East Indiantown Road , Jupiter, Florida, 33458, United States"> 
     <gd:entryLink> 
     <entry xmlns="http://www.w3.org/2005/Atom" xmlns:g="http://base.google.com/ns/1.0" xmlns:gd="http://schemas.google.com/g/2005" xmlns:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml" xmlns:media="http://search.yahoo.com/mrss/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"> 
      <id>http://eventful.com/jupiter/venues/corners-/V0-001-001473018-9</id> 
      <link href="http://eventful.com/jupiter/venues/corners-/V0-001-001473018-9" type="text/html" rel="alternate" /> 
      <title>Corners</title> 
      <georss:where> 
      <gml:Point> 
       <gml:pos>26.9342076 -80.0922588</gml:pos> 
      </gml:Point> 
      </georss:where> 
      <gd:contactSection label="Corners"> 
      <gd:postalAddress> 
       71 East Indiantown Road 
       Jupiter, Florida 33458, United States 
      </gd:postalAddress> 
      <gd:geoPt lat="26.9342076" lon="-80.0922588" /> 
      </gd:contactSection> 
      <content type="html"> 
      &lt;div class='vcard'&gt; 
      &lt;a class='fn org url uid' href='http://eventful.com/venues/V0-001-001473018-9'&gt;Corners&lt;/a&gt; 
      &lt;div class='adr'&gt; 
      &lt;span class='street-address'&gt;71 East Indiantown Road&lt;/span&gt;, &lt;span class='locality'&gt;Jupiter&lt;/span&gt;, &lt;span class='region'&gt;Florida&lt;/span&gt; &lt;span class='postal-code'&gt;33458&lt;/span&gt; &lt;span class='country-name'&gt;United States&lt;/span&gt;&lt;/div&gt; 
      &lt;/div&gt; 
      </content> 
      <media:text type="html"> 
      &lt;div class='vcard'&gt; 
      &lt;a class='fn org url uid' href='http://eventful.com/venues/V0-001-001473018-9'&gt;Corners&lt;/a&gt; 
      &lt;div class='adr'&gt; 
      &lt;span class='street-address'&gt;71 East Indiantown Road&lt;/span&gt;, &lt;span class='locality'&gt;Jupiter&lt;/span&gt;, &lt;span class='region'&gt;Florida&lt;/span&gt; &lt;span class='postal-code'&gt;33458&lt;/span&gt; &lt;span class='country-name'&gt;United States&lt;/span&gt;&lt;/div&gt; 
      &lt;/div&gt; 
      </media:text> 
      <category scheme="http://eventful.com/venues/tags/" term="americantowns" label="American Towns" /> 
      <category scheme="http://eventful.com/venues/tags/" term="americantownscom" label="americantowns.com" /> 
      <category scheme="http://eventful.com/venues/tags/" term="artistdatacom" label="artistdata.com" /> 
      <category scheme="http://eventful.com/venues/tags/" term="barnightclub" label="BarNight Club" /> 
      <category scheme="http://eventful.com/venues/tags/" term="community" label="community" /> 
      <category scheme="http://eventful.com/venues/tags/" term="local" label="local" /> 
      <category scheme="http://eventful.com/venues/tags/" term="townsquare" label="town square" /> 
      <category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/g/2005#contact" /> 
      <author> 
      <name>evdb</name> 
      <uri>http://eventful.com/users/evdb</uri> 
      </author> 
     </entry> 
     </gd:entryLink> 
    </gd:where> 

回答

4

的問題是entry元素在一個XML命名空間(在每個xmlns屬性entry)。

你需要這樣做:

XNamespace atom = "http://www.w3.org/2005/Atom"; 
var feeds = from feed in feedXML.Descendants(atom + "entry") 
      select new { 
       Title = feed.Element(atom + "title").Value, 
       Link = feed.Element(atom + "link").Value, 
       Description = feed.Element(atom + "content").Value 
      }; 

該代碼使用隱式轉換創建XNamespace對象,然後使用XNamespace的重載+運營商創建一個XName。有關更多信息,請參閱here