2010-10-16 5 views
1

J'essaye d'analyser un flux rss. Je peux obtenir les éléments, mais peu importe ce que j'essaie, je ne peux pas obtenir les attributs!lire l'attribut en utilisant XDocument et LINQ

Voici comment les flux rss (xml) ressemble à:

<?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> 

L'attribut i essaie d'obtenir est le 'url du boîtier.

Ceci est mon essai:

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 : "") 
        } 
      }; 
    } 

ce que je fais mal ici?

+0

Comment avez-vous fait ça jon? – Yustme

Répondre

2

est-il pas

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

?

+0

oui cela a fonctionné! Mais comment? l'enceinte n'est pas un élément, n'est-ce pas? ne devrait-il pas être un attribut? – Yustme

+0

@Yustme: Je pense que vous êtes confus parce que l'enceinte est une étiquette à fermeture automatique, il est toujours un élément car il commence par < –

+0

ah okay, c'est un moment depuis que j'ai joué avec xml. merci d'avoir éclairci ça pour moi! – Yustme

Questions connexes