none
RSS balises <content:encoded> RRS feed

  • Question

  • Bonjour a tous,

    J'arrive à parser le contenu d'un flux xml, mais jamais vraiment en totalité. En effet, j'aimerai comprendre comment parser une fois après avoir récupérer e.Result sous forme de string le contenu présent dans les balises content:encoded des flux rss ?

    ex : http://www.exponaute.com/feed/

     StringReader stringReader = new StringReader(feedXML); // feedXML etant e.result
                XmlReader xmlReader = XmlReader.Create(stringReader);
    
    
                XElement xmlFeeds = XElement.Parse(feedXML);
                List<XElement> elements = xmlFeeds.Descendants("item").ToList();
                List<RSSItem> flux = new List<RSSItem>();
    
    
                foreach (XElement rssItem in elements)
                {
                    RSSItem rss = new RSSItem();
                    rss.Content = rssItem.Element("content:encoded").Value;
                    flux.Add(rss);
                }
                this.feedListBox.ItemsSource = flux;
               

    je segfault sur la ligne ou j'essaie de récupérer le content encoded.
    Si quelqu'un peut m'expliquer comment procéder simplement pour récuperer grace a la class XElement ce contenu ?

    Merci beaucoup d'avance pour votre aide.
    Je continue mes recherches dans la doc msdna



    • Modifié Necko75 jeudi 22 mars 2012 17:38
    jeudi 22 mars 2012 17:37

Réponses

  • Bonjour,

    Pour pouvoir attaquer un XElement avec le namespace XML il faut définir une instance de ce namespace avant et ensuite l'utiliser pour récupérer l'élement. (en xml le namespace est ici "content") Dans ton cas, ça donnerai ça:

    XNamespace contentNamespace = "http://purl.org/rss/1.0/modules/content/";
    foreach (XElement rssItem in elements)
    {
      string content = rssItem.Element(contentNamespace + "encoded").Value;
      flux.Add(content);
    }

    De cette façon, ça fonctionne et tu peux bien accéder à ton élement.

    • Marqué comme réponse Necko75 vendredi 23 mars 2012 12:31
    vendredi 23 mars 2012 07:49
  • En XML, il ya des Namespaces qui sont representés par des xmlns (XML NameSpaces)

    Pour ensuite acceder aux propriétés définies dans ces namespaces, il faut spécifier le nom du namespace définit au début du fichier XLM, en l'occurence ici dans le flux RSS:

    xmlns:content="http://purl.org/rss/1.0/modules/content/"

    Donc quand on veut acceder à la proprieté: content:encoded, on accède en fait a la propriété encoded qui est disponible dans le namespace content.

    C'est donc pour ça qu'il faut passer par un namespace.

    • Marqué comme réponse Necko75 vendredi 23 mars 2012 12:31
    vendredi 23 mars 2012 11:31

Toutes les réponses

  • Bonjour,

    Pour pouvoir attaquer un XElement avec le namespace XML il faut définir une instance de ce namespace avant et ensuite l'utiliser pour récupérer l'élement. (en xml le namespace est ici "content") Dans ton cas, ça donnerai ça:

    XNamespace contentNamespace = "http://purl.org/rss/1.0/modules/content/";
    foreach (XElement rssItem in elements)
    {
      string content = rssItem.Element(contentNamespace + "encoded").Value;
      flux.Add(content);
    }

    De cette façon, ça fonctionne et tu peux bien accéder à ton élement.

    • Marqué comme réponse Necko75 vendredi 23 mars 2012 12:31
    vendredi 23 mars 2012 07:49
  • Merci pour votre réponse.
    Mais le programme segfault au niveau du string content. En fait je comprends pas trop pourquoi je dois instancier un namespace ... c'est vraiment bizarre comme procédure. Enfin je vais essayer de comprendre pourquoi.

    vendredi 23 mars 2012 10:39
  • En XML, il ya des Namespaces qui sont representés par des xmlns (XML NameSpaces)

    Pour ensuite acceder aux propriétés définies dans ces namespaces, il faut spécifier le nom du namespace définit au début du fichier XLM, en l'occurence ici dans le flux RSS:

    xmlns:content="http://purl.org/rss/1.0/modules/content/"

    Donc quand on veut acceder à la proprieté: content:encoded, on accède en fait a la propriété encoded qui est disponible dans le namespace content.

    C'est donc pour ça qu'il faut passer par un namespace.

    • Marqué comme réponse Necko75 vendredi 23 mars 2012 12:31
    vendredi 23 mars 2012 11:31
  • Oui merci pour ta réponse, en effet tout fonctionne parfaitement. Me reste plus qu'a afficher le contenu HTML.
    Je mets en résolu.

    vendredi 23 mars 2012 12:31