BitterLemon (Normal User)
Newbie
Messaggi: 10
Iscritto: 06/09/2010
|
Buonpomeriggio,
con XMLReader ho bisogno di leggere vari XML simili a questo come struttura
<strategydex>
<pokemon>Abomasnow</pokemon>
<dex>460</dex>
[...]
<nomeset0>SubSeed</nomeset0>
<natura0>Timid</natura0>
[...]
<nomeset1>Scarfer</nomeset1>
<natura1>Adamant</natura1>
[...]
</strategydex>
Il problema è che per ogni XML ci sono vari tag simili a <nomesetX> e <naturaX> (e altri) con X variabile (min 0).
Nel mio progetto iniziale non avevo preso la cosa in considerazione e avevo proceduto considerando un solo <nomeset> e <natura> in questo modo
Codice sorgente - presumibilmente VB.NET |
Dim xmR As XmlReader = XmlReader.Create(link) xmR.ReadToFollowing("nomeset") Dim nomeset As String = xmR.ReadElementContentAsString() xmR.ReadToFollowing("natura") Dim natura As String = xmR.ReadElementContentAsString() TextBox1.Text = "Set: " + nomeset + vbCrLf + "Natura: " + natura
|
Pensavo di fare in questo modo: Leggo tutti i tag, magari con un ciclo For, e li inserisco in un array per ogni tipo (ex: array "nomeset" --> tutti i valori dei tag di nome "nomesetX").
Ultima modifica effettuata da BitterLemon il 18/10/2010 alle 20:49 |
|
netarrow (Admin)
Guru^2
Messaggi: 2502
Iscritto: 12/05/2004
|
Quello che vuoi fare tu è serializzare un array di oggetti.
Creare n tag con un indice nel nome non è la cosa giusta da fare.
Devi avere un file XML ad esempio così strutturato:
Codice sorgente - presumibilmente Plain Text |
<Pokemons>
<Pokemon>
<Name>Abomasnow</Name>
<Dex>460</Dex>
<NomeSet>SubSeed</NomeSet>
<Natura>Timid</Natura>
</Pokemon>
<Pokemon>
[...]
</Pokemon>
</Pokemons>
|
Poi crei una classe che rappresenta l'entità, esponendo quindi le proprietà Nome, Dex, NomeSet, Natura e tutto quello che ti serve.
Poi per "salvare" serializzi una lista di oggetti, per caricare la deserializzi.
Come esempi ne tovi parecchi in giro per la rete, un punto di partenza è sicuramente msdn: http://msdn.microsoft.com/en-us/library/ms733901.aspx
Ultima modifica effettuata da netarrow il 18/10/2010 alle 21:20 |
|
netarrow (Admin)
Guru^2
Messaggi: 2502
Iscritto: 12/05/2004
|
Non è necessario fare il parsing del xml con XmlSerializer, lo fa lui.
Ecco due esempi (sono in C# ma non cambia niente, le classi sono quelle):
Salva (serializza):
Codice sorgente - presumibilmente C# / VB.NET |
XmlSerializer xmlSerializer = new XmlSerializer(typeof(List<Pokemon>));
using (StreamWriter writer = new StreamWriter())
{
xmlSerializer.Serialize(writer, pokemons); //pokemons è la tua lista di oggetti
}
|
Leggi (deserializza):
Codice sorgente - presumibilmente C# / VB.NET |
XmlSerializer xmlSerializer = new XmlSerializer(typeof(List<Pokemon>));
using (StreamReader reader = new StreamReader())
{
List<Pokemon> obj = (List<Pokemon>) xmlSerializer.Deserialize(reader);
}
|
Ultima modifica effettuata da netarrow il 19/10/2010 alle 23:56 |
|
netarrow (Admin)
Guru^2
Messaggi: 2502
Iscritto: 12/05/2004
|
Serialize richiede un riferimento all'oggetto perchè persisti su xml un'istanza specifica.
Puoi anche non usare la serializzazione e solo deserializzare, cioè preparare l'oggetto scrivendo l'XML a mano.
Per quanto riguarda il fatto di avere l'xml sul web non è un problema in lettura, infatti potresti usare un WebRequest:
Codice sorgente - presumibilmente C# / VB.NET |
...
WebRequest request = WebRequest.Create(url);
WebResponse response = request.GetResponse();
Stream s = response.GetResponseStream();
StreamReader stream = new StreamReader(s);
XmlSerializer xmlSerializer = new XmlSerializer(typeof(List<Pokemon>));
List<Pokemon> obj = (List<Pokemon>) xmlSerializer.Deserialize(stream);
...
|
|
|
netarrow (Admin)
Guru^2
Messaggi: 2502
Iscritto: 12/05/2004
|
|
|
BitterLemon (Normal User)
Newbie
Messaggi: 10
Iscritto: 06/09/2010
|
Ciao netarrow, grazie per la risposta.
Ho creato la classe e impostato la serializzazione e non ci sono problemi, tranne per quanto riguarda il parsing del file XML.
Ho cercato su internet ma non ho trovato risposta, ho provato vari metodi tra cui un while dove prelevavo i Value di xmr.Read, ma non ho ottenuto l' effetto desiderato.
Come posso fare per prelevare tutti i value dell' XML (presente sul web, lo ricordo) ?
|
|
BitterLemon (Normal User)
Newbie
Messaggi: 10
Iscritto: 06/09/2010
|
Ho tradotto il codice in questo modo
Codice sorgente - presumibilmente VB.NET |
Dim XmlSerializer As xmlSerializer = new XmlSerializer(typeof(List<Pokemon>)) Dim writer As StreamWriter = New StreamWriter("C:\tmp.xml") XmlSerializer.Serialize(writer, "a")
|
Ho solo due problemi: il primo è che XMLSerializer.Serialize vuole un riferimento all' oggetto e poi non so come estrarre i dati dall' XML online =(
Non ho mai toccato il campo nè della serializzazione nè degli XML in vb.net quindi perdonami per la mia insistenza.
|
|
BitterLemon (Normal User)
Newbie
Messaggi: 10
Iscritto: 06/09/2010
|
Ciao netarrow e grazie per gli aiuti
Ho un problema a tradurre queste due righe dal C# che ahimè non conosco (il resto ci sono riuscito con un pò di logica).
Codice sorgente - presumibilmente C# / VB.NET |
XmlSerializer xmlSerializer = new XmlSerializer(typeof(List<Pokemon>));
List<Pokemon> obj = (List<Pokemon>) xmlSerializer.Deserialize(stream);
|
|
|
BitterSweet (Normal User)
Newbie
Messaggi: 5
Iscritto: 07/11/2010
|
Sono BitterLemon, ma ho avuto problemi con l'impronta biometrica e l'indirizzo email e ho dovuto creare un nuovo account
Ho però un problema, non ho capito cosa devo sostituire a List<Pokemon> nella conversione in vb.net
|
|