locked
parser une page XMl RRS feed

Réponses

  • Les images sont dans l'élément description, il faut donc que tu écrives une expression régulière pour récuperer les données, voici un tutoriel 

     

    http://www.codeproject.com/KB/dotnet/regextutorial.aspx

     

    elle devrait ressembler à 

     

    var reg=new Regex("http://www.mosaiquefm.net/images/thumbs/[^.]+.jpg");

    var match=reg.Match(description);

    if(match.Success)

    {

    var image=reg.Value;

    }


    S'il vous plaît n'oublier pas de marquer la ou les réponses qui aident à résoudre votre problème. Pour que la discussion puisse être marquée comme résolue
    • Marqué comme réponse rudyhuynMVP lundi 2 janvier 2012 09:24
    lundi 2 janvier 2012 09:24
  • merci rudy ça marché mais juste j'ai fait quelque changement ici

      List<RSSitem> list = (from x in xml_document.Element("articles").Descendants("article")

                                      select new RSSitem

                                      {

                                           Title = (x.Element("Title") != null) ? (x.Element("Title").Value) : string.Empty,

                                          teaser = (x.Element("teaser") != null) ? (x.Element("teaser").Value) : string.Empty,

                                          content = (x.Element("content") != null) ? (x.Element("content").Value) : string.Empty,

                                          sound = (x.Element("sound") != null) ? (x.Element("sound").Value) : string.Empty,

                                          photo = (x.Element("photo") != null) ? (x.Element("photo").Value) : string.Empty,

                                          date = (x.Element("date") != null) ? (x.Element("date").Value) : string.Empty,

                                      }).ToList<RSSitem>();

                listBox1.ItemsSource = list;

     

    • Modifié maroonet dimanche 5 février 2012 16:22
    • Marqué comme réponse maroonet dimanche 5 février 2012 16:22
    dimanche 5 février 2012 15:22
  • 1:

                try
                {
                    WebClient wc = new WebClient();
                    wc.DownloadStringAsync(new Uri("http://www.mosaiquefm.net/Syndicate/MosaNews.xml", UriKind.Absolute));
                    wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted);
                }
                catch { MessageBox.Show("Problem de communication...."); }

    2:

    void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
            {
                // Si une erreur s'est produite pendant le téléchargement, on ne renvoit rien
                if (e.Error != null) return;

                // On va transformer le résultat en éléments XML
                try
                {
                    textBlock1.Visibility = Visibility.Collapsed;
                    System.Xml.Linq.XElement xmlItems = System.Xml.Linq.XElement.Parse(e.Result);

                    foreach (System.Xml.Linq.XElement x in xmlItems.Descendants("item"))
                    {
                        Article newToDo = new Article()
                        {
                            Intitule = x.Element("title").Value,
                            CreatedDate = x.Element("pubDate").Value,
                            Story = Regex.Replace(x.Element("description").Value, @"<(.|\n)*?>", ""),
                            Published = x.Element("link").Value,
                        };
     
                        malisteBox.Items.Add(newToDo);
                    }
                }
                catch
                {
                }
            }

    3:

    tu ajout un evenement dans ta listBox ex: .

    <ListBox  x:Name="malisteBox"  SelectionChanged="ListBox1_SelectionChanged" > </ListBox>

    4:

    private void malisteBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
            {
                if (e.AddedItems.Count == 0) return;
                Article fluxCr = (Article)ListBox1.SelectedItem;
                PhoneApplicationService.Current.State["Article"] = fluxCr;
                ListBox1.SelectedItem = null;
                NavigationService.Navigate(new Uri("/DetailsArticle.xaml", UriKind.Relative));
            }

    protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
            {
                //base.OnNavigatedFrom(e);
            }

    5: dans la page DetailsArticle.xaml tu ajoute

            protected override void OnNavigatedTo(NavigationEventArgs e)
            {

                Article FluxCr = (Article)PhoneApplicationService.Current.State["Article"];
                description.Text = FluxCr.Story;
                title.Text = FluxCr.Intitule;
                date.Text = FluxCr.CreatedDate;
                this.DataContext = FluxCr;
                base.OnNavigatedTo(e);
            }

    • Marqué comme réponse rudyhuynMVP vendredi 10 février 2012 09:16
    mercredi 8 février 2012 17:47

Toutes les réponses

  • Les images sont dans l'élément description, il faut donc que tu écrives une expression régulière pour récuperer les données, voici un tutoriel 

     

    http://www.codeproject.com/KB/dotnet/regextutorial.aspx

     

    elle devrait ressembler à 

     

    var reg=new Regex("http://www.mosaiquefm.net/images/thumbs/[^.]+.jpg");

    var match=reg.Match(description);

    if(match.Success)

    {

    var image=reg.Value;

    }


    S'il vous plaît n'oublier pas de marquer la ou les réponses qui aident à résoudre votre problème. Pour que la discussion puisse être marquée comme résolue
    • Marqué comme réponse rudyhuynMVP lundi 2 janvier 2012 09:24
    lundi 2 janvier 2012 09:24
  • merci roudy mais mon encadreur a changé la methode de travail par ce que je travail a une application wp7 pour mes etudes..il veux que je fait un parse d'un flux XMl comme ' http://www.mosaiquefm.net/smart/newscast.xml?Cat=4 ' 

    j'ai essayé avec l'ancienne méthode de  http://www.wp7team.com/wp7-lire-un-flux-rss/  mais ça rien affiché alors qu'est ce que je doit faire exactement.

    merci d'avance 

    mercredi 11 janvier 2012 22:48
  • bonsoir j'ai fait 2 classe pour parser le lien xml que je veux..mais j'ai eu un erreur NullReferenceException
    void MainPage_Loaded(object sender, RoutedEventArgs e)
            {
                WebClient wc = new WebClient();
             wc.DownloadStringAsync(new Uri("http://www.mosaiquefm.net/smart/newscast.xml?Cat=4"));
               
                wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted);
            }
            void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
            {   if (e.Error != null) return;
              XDocument xml_document=XDocument.Parse(e.Result);
                List<RSSitem> listBox1 = (from x in xml_document.Element("articles").Descendants("article")
                                        select new RSSitem
                                        {
                                             articles = x.Element("articles").Value,
                                             article = x.Element("articles").Value,
                                             Title = (x.Element("Title").Value),
                                             link = (x.Element("link").Value),
                                             teaser=(x.Element("teaser").Value),
                                             content = x.Element("content").Value,
                                             sound= x.Element("sound").Value,
                                             photo = x.Element("photo").Value,
                                             date =x.Element("date").Value
                                         }).ToList<RSSitem>();
            }
    et la classe RSSitem qui contient mes balise 
    public class RSSitem
        {
            public string articles { get; set; }
            public string article { get; set; }
            public string Title { get; set; }
            public string link { get; set; }
            public string teaser { get; set; }
            public string content { get; set; }
            public string sound { get; set; }
            public string photo { get; set; }
            public string date { get; set; }
      
        }
    Merci de m'aidez le plus tôt possible 

    • Modifié maroonet jeudi 19 janvier 2012 18:24
    mercredi 18 janvier 2012 20:04
  •  articles = x.Element("articles").Value,
    article = x.Element("articles").Value,
    ne sont pas des noeuds enfant de article, supprime ces lignes

    S'il vous plaît n'oublier pas de marquer la ou les réponses qui aident à résoudre votre problème. Pour que la discussion puisse être marquée comme résolue
    jeudi 2 février 2012 16:14
  • merci rudy infiniment j'ai supprimé ces lignes et j'ai plus l'erreur  NullReferenceException mais en mème temps ca n'affiche rien..IL m'affiche une page vide..SI ça ne te derrange pas je t'envoie le code et tu le voix..C'est urgent stp et je besoin d'une solution je suis bloquer depuis 2 semaine 

    merci infiniment :)

    vendredi 3 février 2012 11:16
  • IL faut que tu definisses le look de tes items :

     

    <ListBox>

    <ListBox.ItemTemplate>

    <DataTemplate>

    <TextBlock Text={Binding content}" />

    ...

    </DataTemplate>

    </Listbox.ItemTemplate>

    </ListBox>


    S'il vous plaît n'oublier pas de marquer la ou les réponses qui aident à résoudre votre problème. Pour que la discussion puisse être marquée comme résolue
    vendredi 3 février 2012 13:17
  • rudy j'ai fait tous mais çà pas marché,toujours il m'affiche une page vide  s'il vous plait est ce que je vais vous envoyé le projet et vous voyer le problème c'est quoi c'est urgent s'il vous plait  je doit le terminer depuis une semaine mais je suis bloquer et je serai reconnaissance,c'est un projet pour mes etudes et je suis bloqué depuis deux semaine je trouve personne a m'aider

    voila le lien du projet :http://www.mediafire.com/?nccco1xgovv1fwr

     merci infiniment voila mon mail si vous arrivez a faire quelque chose envoyer à moi par mail..( khefifi.marwen@gmail.com)

    samedi 4 février 2012 00:32
  • Affecte ta liste de données à ta listbox

     

    List<RSSitem> list = (from x in xml_document.Element("articles").Descendants("article")
                                        select new RSSitem
                                        {
                                             articles = x.Element("articles").Value,
                                             article = x.Element("articles").Value,
                                             Title = (x.Element("Title").Value),
                                             link = (x.Element("link").Value),
                                             teaser=(x.Element("teaser").Value),
                                             content = x.Element("content").Value,
                                             sound= x.Element("sound").Value,
                                             photo = x.Element("photo").Value,
                                             date =x.Element("date").Value
                                         }).ToList<RSSitem>();

    MaListBox.ItemsSource=list;


    S'il vous plaît n'oublier pas de marquer la ou les réponses qui aident à résoudre votre problème. Pour que la discussion puisse être marquée comme résolue
    samedi 4 février 2012 22:57
  • merci rudy ça marché mais juste j'ai fait quelque changement ici

      List<RSSitem> list = (from x in xml_document.Element("articles").Descendants("article")

                                      select new RSSitem

                                      {

                                           Title = (x.Element("Title") != null) ? (x.Element("Title").Value) : string.Empty,

                                          teaser = (x.Element("teaser") != null) ? (x.Element("teaser").Value) : string.Empty,

                                          content = (x.Element("content") != null) ? (x.Element("content").Value) : string.Empty,

                                          sound = (x.Element("sound") != null) ? (x.Element("sound").Value) : string.Empty,

                                          photo = (x.Element("photo") != null) ? (x.Element("photo").Value) : string.Empty,

                                          date = (x.Element("date") != null) ? (x.Element("date").Value) : string.Empty,

                                      }).ToList<RSSitem>();

                listBox1.ItemsSource = list;

     

    • Modifié maroonet dimanche 5 février 2012 16:22
    • Marqué comme réponse maroonet dimanche 5 février 2012 16:22
    dimanche 5 février 2012 15:22
  • 1:

                try
                {
                    WebClient wc = new WebClient();
                    wc.DownloadStringAsync(new Uri("http://www.mosaiquefm.net/Syndicate/MosaNews.xml", UriKind.Absolute));
                    wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted);
                }
                catch { MessageBox.Show("Problem de communication...."); }

    2:

    void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
            {
                // Si une erreur s'est produite pendant le téléchargement, on ne renvoit rien
                if (e.Error != null) return;

                // On va transformer le résultat en éléments XML
                try
                {
                    textBlock1.Visibility = Visibility.Collapsed;
                    System.Xml.Linq.XElement xmlItems = System.Xml.Linq.XElement.Parse(e.Result);

                    foreach (System.Xml.Linq.XElement x in xmlItems.Descendants("item"))
                    {
                        Article newToDo = new Article()
                        {
                            Intitule = x.Element("title").Value,
                            CreatedDate = x.Element("pubDate").Value,
                            Story = Regex.Replace(x.Element("description").Value, @"<(.|\n)*?>", ""),
                            Published = x.Element("link").Value,
                        };
     
                        malisteBox.Items.Add(newToDo);
                    }
                }
                catch
                {
                }
            }

    3:

    tu ajout un evenement dans ta listBox ex: .

    <ListBox  x:Name="malisteBox"  SelectionChanged="ListBox1_SelectionChanged" > </ListBox>

    4:

    private void malisteBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
            {
                if (e.AddedItems.Count == 0) return;
                Article fluxCr = (Article)ListBox1.SelectedItem;
                PhoneApplicationService.Current.State["Article"] = fluxCr;
                ListBox1.SelectedItem = null;
                NavigationService.Navigate(new Uri("/DetailsArticle.xaml", UriKind.Relative));
            }

    protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
            {
                //base.OnNavigatedFrom(e);
            }

    5: dans la page DetailsArticle.xaml tu ajoute

            protected override void OnNavigatedTo(NavigationEventArgs e)
            {

                Article FluxCr = (Article)PhoneApplicationService.Current.State["Article"];
                description.Text = FluxCr.Story;
                title.Text = FluxCr.Intitule;
                date.Text = FluxCr.CreatedDate;
                this.DataContext = FluxCr;
                base.OnNavigatedTo(e);
            }

    • Marqué comme réponse rudyhuynMVP vendredi 10 février 2012 09:16
    mercredi 8 février 2012 17:47
  • vila la classe Article

    public partial class Article
        {



            public string title {get;set };

    public string description {get;set };

    public string  update {get;set };

    public string link {get;set };

           
    }

          

    mercredi 8 février 2012 18:05