OVH Cloud OVH Cloud

Xml => RSS

4 réponses
Avatar
Francois Soucy
Bonjour à tous,
Je permet sur mon site à tous les utilisateurs
d'ajouter un lien "RSS" pour lire les nouvelles de leurs choix. Pour le
moment avec les fichiers rss standart la validation semble bien fonctionner.
Sauf pour un exemple particulier. Celui de Slashdot qui pourtant est dans
les norme du RSS. Voici le lien de leur fichier rss:
http://slashdot.org/index.rss

Et voila comment je validais les autres fichiers:
'###############
Private Function ValiderRss() as Boolean
Dim Out As String
Dim XmlDoc As New System.Xml.XmlDocument
XmlDoc.Load(Me.TxtUrl.Text)
Dim XPath As String

XPath = "//channel/title" 'Récupérer le titre
Dim NodeTitle As System.Xml.XmlNode = XmlDoc.SelectSingleNode(XPath)
XPath = "//channel/link" 'Récupérer le lien
Dim NodeUrl As System.Xml.XmlNode = XmlDoc.SelectSingleNode(XPath)
'Et on commence à afficher
Out = "<a href=" & NodeUrl.InnerText & ">" & NodeTitle.InnerText &
"</a><BR><BR>"
............. etc

'######################
Avec le fichier de Slashdot les nodes NodeTitle et NodeUrl sont toujours à
Nothing et je ne vois vraiment pas pourquoi puisque cela fonctionne
parfaitement avec les autres site. Est-ce que c'est parce qu'ils ont des
genres de syntaxes du genre : <channel rdf:about="http://slashdot.org/"> ?
Est-ce le rdf:about qui change les choses? Je vous avous que c'est un peu
dure de faire le déboguage de cela et je ne sais plus où je dois commencer
pour tout vérifier la machine. Avez-vous une idée?

Merci,
Francois

4 réponses

Avatar
Lionel LASKE
Je pense qu'il manque le niveau "item". Tes requêtes XPath devraient plutôt
référencer "//channel/item/title" et "//channel/item/link". Voici un exemple
de parcours d'un flux RSS:

XPathDocument xpDoc = new XPathDocument(txtRSSURL.Text);
XPathNavigator xpNav = xpDoc.CreateNavigator();
XPathExpression expr xpNav.Compile("/rss/channel/item");

XPathExpression titleExpr = xpNav.Compile("string(title/text())");
XPathExpression linkExpr = xpNav.Compile("string(link/text())");
XPathExpression descExpr =
xpNav.Compile("string(description/text())");

XPathNodeIterator iter = xpNav.Select(expr);
while (iter.MoveNext())
{
string title = (string)iter.Current.Evaluate(titleExpr);
string link = (string)iter.Current.Evaluate(linkExpr);
string desc = (string)iter.Current.Evaluate(descExpr);

...
}

L'exemple utilise un XPathNavigator plutôt qu'un Select sur un XmlDocument,
c'est généralement plus performant.

Lionel.


"Francois Soucy" a écrit dans le message de news:

Bonjour à tous,
Je permet sur mon site à tous les utilisateurs
d'ajouter un lien "RSS" pour lire les nouvelles de leurs choix. Pour le
moment avec les fichiers rss standart la validation semble bien
fonctionner. Sauf pour un exemple particulier. Celui de Slashdot qui
pourtant est dans les norme du RSS. Voici le lien de leur fichier rss:
http://slashdot.org/index.rss

Et voila comment je validais les autres fichiers:
'###############
Private Function ValiderRss() as Boolean
Dim Out As String
Dim XmlDoc As New System.Xml.XmlDocument
XmlDoc.Load(Me.TxtUrl.Text)
Dim XPath As String

XPath = "//channel/title" 'Récupérer le titre
Dim NodeTitle As System.Xml.XmlNode = XmlDoc.SelectSingleNode(XPath)
XPath = "//channel/link" 'Récupérer le lien
Dim NodeUrl As System.Xml.XmlNode = XmlDoc.SelectSingleNode(XPath)
'Et on commence à afficher
Out = "<a href=" & NodeUrl.InnerText & ">" & NodeTitle.InnerText &
"</a><BR><BR>"
............. etc

'######################
Avec le fichier de Slashdot les nodes NodeTitle et NodeUrl sont toujours à
Nothing et je ne vois vraiment pas pourquoi puisque cela fonctionne
parfaitement avec les autres site. Est-ce que c'est parce qu'ils ont des
genres de syntaxes du genre : <channel rdf:about="http://slashdot.org/"> ?
Est-ce le rdf:about qui change les choses? Je vous avous que c'est un peu
dure de faire le déboguage de cela et je ne sais plus où je dois commencer
pour tout vérifier la machine. Avez-vous une idée?

Merci,
Francois



Avatar
Francois Soucy
Non il ne me manque pas le niveau "item" puisque les éléments "title" et
"link se retrouve aussi à la base du document. Regard le lien que j'ai
envoyé avec le post original. C'est juste a ce niveau que je cherche a
comprendre pourquoi il ne veut pas le prendre. Les 2 éléments sont bien là
mais ne semble pas être vu par le selecteur de node.

Francois
"Lionel LASKE" a écrit dans le message de news:


Je pense qu'il manque le niveau "item". Tes requêtes XPath devraient
plutôt référencer "//channel/item/title" et "//channel/item/link". Voici
un exemple de parcours d'un flux RSS:

XPathDocument xpDoc = new XPathDocument(txtRSSURL.Text);
XPathNavigator xpNav = xpDoc.CreateNavigator();
XPathExpression expr > xpNav.Compile("/rss/channel/item");

XPathExpression titleExpr = xpNav.Compile("string(title/text())");
XPathExpression linkExpr = xpNav.Compile("string(link/text())");
XPathExpression descExpr =
xpNav.Compile("string(description/text())");

XPathNodeIterator iter = xpNav.Select(expr);
while (iter.MoveNext())
{
string title = (string)iter.Current.Evaluate(titleExpr);
string link = (string)iter.Current.Evaluate(linkExpr);
string desc = (string)iter.Current.Evaluate(descExpr);

...
}

L'exemple utilise un XPathNavigator plutôt qu'un Select sur un
XmlDocument, c'est généralement plus performant.

Lionel.


"Francois Soucy" a écrit dans le message de news:

Bonjour à tous,
Je permet sur mon site à tous les utilisateurs
d'ajouter un lien "RSS" pour lire les nouvelles de leurs choix. Pour le
moment avec les fichiers rss standart la validation semble bien
fonctionner. Sauf pour un exemple particulier. Celui de Slashdot qui
pourtant est dans les norme du RSS. Voici le lien de leur fichier rss:
http://slashdot.org/index.rss

Et voila comment je validais les autres fichiers:
'###############
Private Function ValiderRss() as Boolean
Dim Out As String
Dim XmlDoc As New System.Xml.XmlDocument
XmlDoc.Load(Me.TxtUrl.Text)
Dim XPath As String

XPath = "//channel/title" 'Récupérer le titre
Dim NodeTitle As System.Xml.XmlNode = XmlDoc.SelectSingleNode(XPath)
XPath = "//channel/link" 'Récupérer le lien
Dim NodeUrl As System.Xml.XmlNode = XmlDoc.SelectSingleNode(XPath)
'Et on commence à afficher
Out = "<a href=" & NodeUrl.InnerText & ">" & NodeTitle.InnerText &
"</a><BR><BR>"
............. etc

'######################
Avec le fichier de Slashdot les nodes NodeTitle et NodeUrl sont toujours
à Nothing et je ne vois vraiment pas pourquoi puisque cela fonctionne
parfaitement avec les autres site. Est-ce que c'est parce qu'ils ont des
genres de syntaxes du genre : <channel rdf:about="http://slashdot.org/">
? Est-ce le rdf:about qui change les choses? Je vous avous que c'est un
peu dure de faire le déboguage de cela et je ne sais plus où je dois
commencer pour tout vérifier la machine. Avez-vous une idée?

Merci,
Francois







Avatar
Lionel LASKE
Essaye avec RssFeed:
http://www.gotdotnet.com/workspaces/workspace.aspx?idj116a0f-66c4-4f91-9e13-a0d00960b9ad
Il propose cette fonctionnalité sous forme d'un user control ASP.NET.

Lionel.

"Francois Soucy" a écrit dans le message de news:

Non il ne me manque pas le niveau "item" puisque les éléments "title" et
"link se retrouve aussi à la base du document. Regard le lien que j'ai
envoyé avec le post original. C'est juste a ce niveau que je cherche a
comprendre pourquoi il ne veut pas le prendre. Les 2 éléments sont bien là
mais ne semble pas être vu par le selecteur de node.

Francois
"Lionel LASKE" a écri


t dans le message de news:


Je pense qu'il manque le niveau "item". Tes requêtes XPath devraient
plutôt référencer "//channel/item/title" et "//channel/item/link". Voici
un exemple de parcours d'un flux RSS:

XPathDocument xpDoc = new XPathDocument(txtRSSURL.Text);
XPathNavigator xpNav = xpDoc.CreateNavigator();
XPathExpression expr >> xpNav.Compile("/rss/channel/item");

XPathExpression titleExpr =
xpNav.Compile("string(title/text())");
XPathExpression linkExpr = xpNav.Compile("string(link/text())");
XPathExpression descExpr =
xpNav.Compile("string(description/text())");

XPathNodeIterator iter = xpNav.Select(expr);
while (iter.MoveNext())
{
string title = (string)iter.Current.Evaluate(titleExpr);
string link = (string)iter.Current.Evaluate(linkExpr);
string desc = (string)iter.Current.Evaluate(descExpr);

...
}

L'exemple utilise un XPathNavigator plutôt qu'un Select sur un
XmlDocument, c'est généralement plus performant.

Lionel.


"Francois Soucy" a écrit dans le message de news:

Bonjour à tous,
Je permet sur mon site à tous les utilisateurs
d'ajouter un lien "RSS" pour lire les nouvelles de leurs choix. Pour le
moment avec les fichiers rss standart la validation semble bien
fonctionner. Sauf pour un exemple particulier. Celui de Slashdot qui
pourtant est dans les norme du RSS. Voici le lien de leur fichier rss:
http://slashdot.org/index.rss

Et voila comment je validais les autres fichiers:
'###############
Private Function ValiderRss() as Boolean
Dim Out As String
Dim XmlDoc As New System.Xml.XmlDocument
XmlDoc.Load(Me.TxtUrl.Text)
Dim XPath As String

XPath = "//channel/title" 'Récupérer le titre
Dim NodeTitle As System.Xml.XmlNode = XmlDoc.SelectSingleNode(XPath)
XPath = "//channel/link" 'Récupérer le lien
Dim NodeUrl As System.Xml.XmlNode = XmlDoc.SelectSingleNode(XPath)
'Et on commence à afficher
Out = "<a href=" & NodeUrl.InnerText & ">" & NodeTitle.InnerText &
"</a><BR><BR>"
............. etc

'######################
Avec le fichier de Slashdot les nodes NodeTitle et NodeUrl sont toujours
à Nothing et je ne vois vraiment pas pourquoi puisque cela fonctionne
parfaitement avec les autres site. Est-ce que c'est parce qu'ils ont des
genres de syntaxes du genre : <channel rdf:about="http://slashdot.org/">
? Est-ce le rdf:about qui change les choses? Je vous avous que c'est un
peu dure de faire le déboguage de cela et je ne sais plus où je dois
commencer pour tout vérifier la machine. Avez-vous une idée?

Merci,
Francois











Avatar
Francois Soucy
Merci bien!
Avec ce logiciel j'ai pu enfin comprendre que certains "feeds" que je
voulais afficher n'était pas sous la norme rss 0.97-2.0 mais bien sous la
norme RDF. Une chose que j'ignorais completement l'existence!

Francois

"Lionel LASKE" a écrit dans le message de news:


Essaye avec RssFeed:
http://www.gotdotnet.com/workspaces/workspace.aspx?idj116a0f-66c4-4f91-9e13-a0d00960b9ad
Il propose cette fonctionnalité sous forme d'un user control ASP.NET.

Lionel.

"Francois Soucy" a écrit dans le message de news:

Non il ne me manque pas le niveau "item" puisque les éléments "title" et
"link se retrouve aussi à la base du document. Regard le lien que j'ai
envoyé avec le post original. C'est juste a ce niveau que je cherche a
comprendre pourquoi il ne veut pas le prendre. Les 2 éléments sont bien
là mais ne semble pas être vu par le selecteur de node.

Francois
"Lionel LASKE" a écri


t dans le message de news:


Je pense qu'il manque le niveau "item". Tes requêtes XPath devraient
plutôt référencer "//channel/item/title" et "//channel/item/link". Voici
un exemple de parcours d'un flux RSS:

XPathDocument xpDoc = new XPathDocument(txtRSSURL.Text);
XPathNavigator xpNav = xpDoc.CreateNavigator();
XPathExpression expr >>> xpNav.Compile("/rss/channel/item");

XPathExpression titleExpr =
xpNav.Compile("string(title/text())");
XPathExpression linkExpr = xpNav.Compile("string(link/text())");
XPathExpression descExpr =
xpNav.Compile("string(description/text())");

XPathNodeIterator iter = xpNav.Select(expr);
while (iter.MoveNext())
{
string title = (string)iter.Current.Evaluate(titleExpr);
string link = (string)iter.Current.Evaluate(linkExpr);
string desc = (string)iter.Current.Evaluate(descExpr);

...
}

L'exemple utilise un XPathNavigator plutôt qu'un Select sur un
XmlDocument, c'est généralement plus performant.

Lionel.


"Francois Soucy" a écrit dans le message de news:

Bonjour à tous,
Je permet sur mon site à tous les utilisateurs
d'ajouter un lien "RSS" pour lire les nouvelles de leurs choix. Pour le
moment avec les fichiers rss standart la validation semble bien
fonctionner. Sauf pour un exemple particulier. Celui de Slashdot qui
pourtant est dans les norme du RSS. Voici le lien de leur fichier rss:
http://slashdot.org/index.rss

Et voila comment je validais les autres fichiers:
'###############
Private Function ValiderRss() as Boolean
Dim Out As String
Dim XmlDoc As New System.Xml.XmlDocument
XmlDoc.Load(Me.TxtUrl.Text)
Dim XPath As String

XPath = "//channel/title" 'Récupérer le titre
Dim NodeTitle As System.Xml.XmlNode = XmlDoc.SelectSingleNode(XPath)
XPath = "//channel/link" 'Récupérer le lien
Dim NodeUrl As System.Xml.XmlNode = XmlDoc.SelectSingleNode(XPath)
'Et on commence à afficher
Out = "<a href=" & NodeUrl.InnerText & ">" & NodeTitle.InnerText &
"</a><BR><BR>"
............. etc

'######################
Avec le fichier de Slashdot les nodes NodeTitle et NodeUrl sont
toujours à Nothing et je ne vois vraiment pas pourquoi puisque cela
fonctionne parfaitement avec les autres site. Est-ce que c'est parce
qu'ils ont des genres de syntaxes du genre : <channel
rdf:about="http://slashdot.org/"> ? Est-ce le rdf:about qui change les
choses? Je vous avous que c'est un peu dure de faire le déboguage de
cela et je ne sais plus où je dois commencer pour tout vérifier la
machine. Avez-vous une idée?

Merci,
Francois