RSS Feed Проблемы с Linq - PullRequest
       15

RSS Feed Проблемы с Linq

1 голос
/ 13 сентября 2009

Попытка прочитать RSS и выбрать информацию с помощью 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>

1 Ответ

4 голосов
/ 14 сентября 2009

Проблема в том, что элементы 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. Для получения дополнительной информации см. здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...