Meilleur auteur de réponses
parser une page XMl

Question
-
bonjour je cherche a faire parser une page XMl pour lire son contenue sur l’écran de mon application..
j'ai arriver a lire le titre et la description de chaque article à l'aide de http://www.wp7team.com/wp7-lire-un-flux-rss/ mais j'ai pas arriver a lire les images.
comment faire pour lire tous les contenue et comment faire pour afficher chaque article avec tous les datais dans une autre page.
NB le flux xml que je veux le lire est ici http://www.mosaiquefm.net/Syndicate/MosaNews.xml
merci d'avance
mercredi 28 décembre 2011 15:33
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;
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 NullReferenceExceptionvoid 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 balisepublic 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ésoluejeudi 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ésoluevendredi 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ésoluesamedi 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;
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