2010-10-16 2 views
1

Я пытаюсь разобрать rss-канал. Я могу получить элементы, но, что бы я ни пытался, я не могу получить атрибуты!читать атрибут с использованием XDocument и LINQ

Это как подача RSS (XML) выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8" ?> 
<rss version="2.0"> 
    <channel> 
    <title>nu.nl - Algemeen</title> 
    <copyright>Copyright (c) 2010, nu.nl</copyright> 
    <link>http://www.nu.nl/algemeen/</link> 
    <language>nl</language> 
    <description>nu.nl Rich Site Summary</description> 
    <pubDate>Sat, 16 Oct 2010 08:36:37 +0200</pubDate> 
       <item> 
     <title>Jason W. keert zich af van moslimextremisme</title> 
     <link>http://www.nu.nl/binnenland/2357342/jason-w-keert-zich-af-van-moslimextremisme.html</link> 
     <guid>http://www.nu.nl/binnenland/2357342/index.html</guid> 
     <description>AMSTERDAM - Het vermeende lid van de Hofstadgroep Jason W. heeft het moslimextremisme naar eigen zeggen de rug toegekeerd.</description> 
       <related> 
      <b>Gerelateerd nieuws:</b><br /> 
            - <a href="http://www.nu.nl/binnenland/2293903/nieuw-proces-leden-hofstadgroep.html">Nieuw proces tegen leden Hofstadgroep</a><br /> 
            - <a href="http://www.nu.nl/binnenland/2175558/proces-hofstadgroep-moet.html">Proces Hofstadgroep moet over</a><br /> 
            - <a href="http://www.nu.nl/algemeen/2073580/eu-hof-verwerpt-beroep-van-lid-hofstadgroep.html">EU-hof verwerpt beroep van lid Hofstadgroep</a><br /> 
        </related> 
       <pubDate>Sat, 16 Oct 2010 08:36:36 +0200</pubDate> 
     <category>Algemeen</category> 
       <enclosure url="http://media.nu.nl/m/m1cz4nqakofe_t.jpg" type="image/jpeg" />  </item> 

Атрибут я пытаюсь получить это "оболочка URL.

Это моя попытка:

private IEnumerable<Channel> getChannelQuery(XDocument xdoc) 
    { 

     return from channels in xdoc.Descendants("channel") 
      select new Channel 
      { 
       Title = channels.Element("title") != null ? channels.Element("title").Value : "", 
       Link = channels.Element("link") != null ? channels.Element("link").Value : "", 
       Description = channels.Element("description") != null ? channels.Element("description").Value : "", 
       //PubDate = channels.Element("pubDate") != null ? channels.Element("pubDate").Value : "", 
       //Enclosure = channels.Element("enclosure ") != null ? channels.Element("enclosure").Value : "", 
       Items = from items in channels.Descendants("item") 
        select new Item 
        { 
         Title = items.Element("title") != null ? items.Element("title").Value : "", 
         Link = items.Element("link") != null ? items.Element("link").Value : "", 
         Description = items.Element("description") != null ? items.Element("description").Value : "", 
         Guid = (items.Element("guid") != null ? items.Element("guid").Value : ""), 
         PubDate = (items.Element("pubDate") != null ? items.Element("pubDate").Value : ""), 
         Enclosure = (items.Attribute("url") != null ? items.Attribute("url").Value : "") 
        } 
      }; 
    } 

Что я здесь делаю неправильно?

+0

как вы это сделали? – Yustme

ответ

2

Разве не

Enclosure = (items.Element("enclosure").Attribute("url") != null ? items.Element("enclosure").Attribute("url").Value : "") 

?

+0

да, что сработало! Но как? корпус не является элементом? разве это не атрибут? – Yustme

+0

@Yustme: Я думаю, вы сбиты с толку, потому что приложение является самозакрывающимся тегом, оно по-прежнему является элементом, поскольку оно начинается с < –

+0

ah okay, его время от времени, когда я играл с xml. спасибо, что освободил меня! – Yustme

Смежные вопросы