Recuperare, in modo random, dati da file xml

venerdì 20 ottobre 2006 - 16.42

soffritto Profilo | Newbie

Buonasera a tutti :)

Faccio il mio esordio con una domanda che dovrebbe far capire in fretta che il nick scelto non è affatto casuale.

Ho un file xml nel quale sono memorizzati alcuni dati riguardanti determinate news:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Mi chiedevo come fosse possibile, per favore, accedere a tale file in modo casuale, per visualizzare ad ogni nuovo accesso una news diversa.
Ho guardato qualche vecchio thread che descriveva l'utilizzo della classe XPathNavigator ma, ancora, non riesco proprio a venirne a capo.

Il progetto lo sto sviluppando (grazie soprattutto alla rete) in vb.

Grazie a tutti.

Arrivederci e buon we :)


Soffritto

soffritto Profilo | Newbie

Ciao Coach :)

Grazie per la solerte e precisa risposta. Ho ancora qualche dubbio, però. E vorrei chieder nuovamente, per favore.

Ho usato, come suggerivi, Xpath
Dim Doc As New XmlDocument() Doc.Load("randomNews.xml") Dim nodelist As XmlNodeList nodelist = Doc.SelectNodes("//newsid")
Ora nodelist dovrebbe corrispondere (se ho capito bene) ad un array che contenga tutte le newsid.
Il passo successivo sarebbe usare la classe random (sempre che non abbia compreso male) per ottenere una newsid in modo casuale. E qui mi blocco, purtroppo.

Tale classe ha bisogno di due estremi, quello inferiore e superiore.
Dim casuale as New Random() Dim i as Integer i = casuale.Next(inferiore, superiore)

Come posso calcolare questi valori, per favore?

Forse è una banale richiesta, ma sinceramente non so andare oltre, al momento.

Ti ringrazio nuovamente :)


EDIT:
Ho trovato questo esempio:
<%@Import namespace="System.Data"%> <SCRIPT RUNAT="SERVER" Language="C#"> void Page_Load() { DataRow dr = GetRandom(Server.MapPath("news.xml"), "newsitem"); // mostro a video tutte le colonne ed i rispettivi valori for (int i=0; i<dr.Table.Columns.Count; i++) Response.Write("<li>" + dr.Table.Columns[0].ToString() + ": " + dr[i].ToString()); } DataRow GetRandom(string path, string item) { // carico il file XML DataSet ds = new DataSet(); ds.ReadXml(path); // estraggo un nodo a caso tra quelli presenti Random rnd = new Random(); return ds.Tables[item].Rows[rnd.Next(0, ds.Tables[item].Rows.Count)]; } </SCRIPT>

Solo che è scritto in C# ed estrapola tutti i dati relativi al tag <newsitem>. A me basterebbe poter accedere al semplice valore di newsid, magari in VB.

Argh. Ce la farò.
Spero :)

Nel frattempo, se dovesse pervenire un qualsiasi aiuto, sarà ben gradito, vista l'incapacità nella quale affogo.
Molte grazie!

soffritto Profilo | Newbie

Ho risolto, anche grazie al suggerimento ricevuto.

Questo è ciò che ne è conseguito.
Sub Page_Load() Dim dr As DataRow dr = GetRandom(Server.MapPath("news.xml"), "newsitem") ' mostro a video tutte le colonne ed i rispettivi valori Response.Write(dr("newsid").ToString()) End Sub Function GetRandom(ByVal path As String, ByVal item As String) ' carico il file XML Dim ds As DataSet = New DataSet() ds.ReadXml(path) ' estraggo un nodo a caso tra quelli presenti Dim Rnd As Random Rnd = New Random Return ds.Tables(0).Rows(Rnd.Next(0, ds.Tables(0).Rows.Count)) End Function
Molte grazie!




EDIT:
Ciao :)

Rispolvero il post per un'altra curiosità, per favore.

Volessi filtrare il dataset, prendendo in considerazione solo i valori corrispondenti a zone=3 (è un altro valore del file news.xml) prima di recuperare in modo random il valore newsitem, come potrei fare?

Argh, come al solito, al momento non vedo nessunaluce.
Qualcuno sa aiutarmi, per favore, a ritrovare l'interruttore?

Molte grazie!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5