Creazione e successiva lettura di un file Xml con vb net 2010

giovedì 19 gennaio 2012 - 09.54

trinity Profilo | Guru

Salve ragazzi,
premetto che non ho mai lavorato con i file xml pertanto ho diverse domandine da porvi.
In un mio nuovo progetto dovrò gestire i file Xml e vorrei avere qualche aiuto semmai anche dei link dove andare a vedere per imparare su come creare i file xml e leggerli in due diversi modi:

1) ho un dataset oppure listoff e devo creare in base alla loro struttura un file xml...Si può e come?
2) devo creare un file xml senza dataset o altro, ho trovato questo codice in rete di esempio, va bene?

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

3) come faccio a leggere un file Xml e carica il suo contenuto in una tabella dataset (ovviamente struttura simile) oppure in una listoff?
4) come faccio a leggere un file xml e prendere solo alcuni valori e gestirli in delle variabili del mio progetto, insomma senza trasferire il contenuto in dataset

Ciao e grazie
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

Jeremy Profilo | Guru

Ciao Fabio.
Il Dataset è un file XML .....
Prova a vedere i metodi WriteXml e la funzione ReadXml dell'oggetto Dataset se possono esserti utili.

Facci sapere...
Ciao

trinity Profilo | Guru

Ok e semmai posso anche creare un xml mediate dati presi da una listoff?

Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

Jeremy Profilo | Guru

>Ok e semmai posso anche creare un xml mediate dati presi da una
>listoff?
Per questo mi sembra che vada bene anche il codice che hai postato.
Ad ogni modo sotto il namespace System.Xml trovi tutto quello che ti serve.

Se hai bisogno .... facci sapere....
Ciao

trinity Profilo | Guru

Scusa non riesco a trovare nessuna spiegazione a cui posso fare riferimento, capire ed imparare la gestione dell'xml per quello che serve a me.
Ti posto il codice che ho utilizzato e ti faccio capire

Imports System.Xml
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim writer As New XmlTextWriter("giordano.xml", System.Text.Encoding.UTF8)
writer.WriteStartDocument(True)
writer.Formatting = Formatting.Indented
writer.Indentation = 2
writer.WriteStartElement("Servizi")
createNode(1, "RISTRUTTURAZIONE", writer)
createNode(2, "TINTEGGIATURA", writer)
createNode(3, "RIFACIMENTO FACCIATA ESTERNE", writer)
writer.WriteEndElement()
writer.WriteEndDocument()
writer.Close()
End Sub
Private Sub createNode(ByVal pID As String, ByVal pName As String, ByVal writer As XmlTextWriter)
writer.WriteStartElement("Tipologie")
writer.WriteStartElement("id")
writer.WriteString(pID)
writer.WriteEndElement()
writer.WriteStartElement("descrizione")
writer.WriteString(pName)
writer.WriteEndElement()
writer.WriteEndElement()
End Sub
End Class

cosi io ho creato un file xml al cui interno ci sono i dati di un nodo tipologie. Ecco io ad ogni tipologia ci saranno annesse N categorie...
Io devo creare un file xml che poi verrà letto in una pagina aspx nel quale file ci siano tutti i dati che mi servono ossia sia il nodo tipologie che il sottonodo categorie.

Suppioniamo che io ho questo esempio di dati da trasformare in xml:

Tipologie:
1 - RISTRUTTURAZIONE
2 - TINTEGGIATURA

Categorie:
1 - Facciata - 1
2 - Balconi - 1
3 - Bagno - 1
1 - Facciata -2
2 - Stanze - 2

Ovviamente nelle categorie i primi numeri sono i progressivi mentre dopo la descrizione ho l'indice che fa riferimento alla tipologia

Ecco come faccio a creare con queste dati un file Xml?

Ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

Jeremy Profilo | Guru

Ciao.
Praticamente .... Vuoi sapere come aggiungere dei sottonodi tipologia a dei nodi categoria?
Se si ..... ti chiedo conferma.
Se no ..... sarebbe utile avere un esempio pratico del risultato in xml che vuoi ottenere ..... anche se, sono sicuro che ti basterebbe creare un Dataset che soddisfi tutti i tuoi criteri di relazione tra le tabelle e successivamente convertirlo in Xml.

Ad ogni modo.... possiamo tentare sia una soluzione che l'altra.

Facci sapere....
Ciao.

trinity Profilo | Guru

Confermo ma è il contrario ossia alle Tipologie aggiungere dei sottonodi chiamati categorie..

Comunque nel frattempo proverò a fare anche mediante il dataset e relazionare due tabelle e vedere...

Ciao e grazie
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

trinity Profilo | Guru

In teoria facendolo a mano lo schema dovrebbe essere una cosa del genere:

<Servizi> <Tipologie> <descrizione>RISTRUTTURAZIONE</descrizione> <Categorie> <descrizione>BALCONI</descrizione> <descrizione>BAGNI</descrizione> </Categorie> <descrizione>TINTEGGIATURA</descrizione> <Categorie> <descrizione>BALCONI</descrizione> <descrizione>BAGNI</descrizione> <descrizione>CAMERE</descrizione> </Categorie> </Tipologia> </Servizi>


se non vado errato come struttura...come logica e contenuto dati è giusto ossia nodo primcipale= tipologie, sottonodi=categorie

Ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

Jeremy Profilo | Guru

Ok ...
ti faccio sapere .....
Ciao

Jeremy Profilo | Guru

Ciao.
prova a vedere se con questo esempio riesci a risolvere il problema ....

Ovviamente è solo un piccolo esempio sicuramente migliorabile .....
Facci sapere...
Ciao

trinity Profilo | Guru

OK perfetto...ora però come faccio a fare l'operazione inversa ossia leggere i dati del file xml?
Leggere per esempio le tipologie ed inserirle in una combobox e poi a seconda della tipologia scelta caricare in un'altra combobox le categorie a lei annesse.

Oppure mi consigli un altro metodo per caricare i dati nelle combobox?

Comunque nel caso ci fosse un'altra migliore strada, il file xml che mi hai creato come lo leggo?

Ciao e grazie

Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

Jeremy Profilo | Guru

Ciao
Visto che devi anche caricare i dati dal file, ho dovuto modificare un pò anche la struttura durante la creazione del file
Ti posto un nuovo progetto di esempio ....
Ovviamente va adattato alle tue esigenze.
se hai bisogno ... facci sapere...

Ciao

Vinsent Profilo | Senior Member

Scusate se mi intrometto...stavo seguendo a scopo "didattico"...
Per la struttura dell' xml non è meglio così:

<Servizi> <item> <id>1</id> <tipologia>RISTRUTTURAZIONE</tipologia> <descrizione>Bagno</descrizione> </item> <item> <id>2</id> <tipologia>RISTRUTTURAZIONE</tipologia> <descrizione>Facciata</descrizione> </item> <item> <id>3</id> <tipologia>TINTEGGIATURA</tipologia> <descrizione>Facciata</descrizione> </item> ---- ECCETERA ECCETERA ---- </Servizi>

è da vedere come un file excel (servizi), con un foglio(item) è tre colonne <id>, <tipologia> e <descrizione>, per i tipi di dati che ho inteso <id> si può anche togliere...
Secondo me è molto più malleabile sia per semplicità che per eseguire aggiunte, modifiche o query, vale sempre l' esempio di excel con colonne, righe, celle, trova, filtro dati, ecc,
Per quanto mi riguarda mi sono trovato bene a gestire gli xml con DataSet anche se System.Xml penso offra molto di più.

Jeremy Profilo | Guru

Ciao Vincenzo.
>Per la struttura dell' xml non è meglio così:
Probabilmente si .... o forse no...cioè ..... non lo so.
Nel senso che ... io mi sono limitato a soddisfare le richieste di Fabio.
Non mi sono addentrato nelle motivazioni per il quale volesse tenere una struttura del genere.
Se non ci fossero vincoli sulla struttura sarebbe addirittura più semplice lavorare sui metodi presenti nella classe DataSet(ReadXml e WriteXml)

Ad ogni modo .... aspettiamo che Fabio valuti questa alternativa e ci faccia sapere.....
Ciao

trinity Profilo | Guru

Ciao ragazzi per me va bene tutto,
la struttura del file xml la decido io, voglio solo trovare il sistema + facile per scrivere e leggere il file xml..anche perchè io poi i nodi li devi attribuire a delle combobox o listview o gridview..mi dicevate che ci sono i metodi presenti nella classe DataSet(ReadXml e WriteXml)..non sarebbe meglio vedere quelli? Solo che non so come usarle quindi alla fine mi serve sempre il vostro grande aiuto ;)

Ps gli id posso anche portarli dietro perchè poi semmai possono essere utili ma tanto alla fine capito come si gestiscono i file xml, la loro struttura me la gestisco io

Ciao e veramente grazie per il vostro aiuto...

PS posso fare questa logica anche a livello web?
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

Jeremy Profilo | Guru

Ciao Fabio
>Ciao ragazzi per me va bene tutto,
Allora forse la situazione è un pò degenerata perchè inizialmente io ti scrissi:
>Prova a vedere i metodi WriteXml e la funzione ReadXml dell'oggetto Dataset se possono esserti utili.
e tu mi rispondesti:
>Ok e semmai posso anche creare un xml mediate dati presi da una listoff?
e ti chiesi:
>Vuoi sapere come aggiungere dei sottonodi tipologia a dei nodi categoria?
e tu mi rispondesti:
>In teoria facendolo a mano lo schema dovrebbe essere una cosa del genere:
E da qui in poi la situazione degenerò ....

Ad ogni modo .... a questo punto ... ti basta modificare queste due Routine in questo modo:
Private Sub CreaFileXML() Ds.WriteXml(Application.StartupPath & "/Prova.xml") End Sub Private Sub CaricaFileXML() RichTextBox1.Text = IO.File.ReadAllText(Application.StartupPath & "/Prova.xml") Ds2.ReadXml(Application.StartupPath & "/Prova.xml") DataGridView1.DataSource = Ds2.Tipologie DataGridView1.Columns(0).Visible = False DataGridView2.DataSource = Ds2.Categorie DataGridView2.Columns(0).Visible = False End Sub

Facci sapere....
Ciao

trinity Profilo | Guru

Hai ragione ho fatto un pò di confusione e ti chiedo scusa per questo
Ricapitolando, se volessi creare un file xml attraverso dati provenienti da una listoff va bene il tuo penultimo codice dove mi fai vedere anche con si legge il file xml stesso. Se volessi invece utilizzare i metodi writexml e readxml del dataset devo utilizzare questo ultimo tuo codice, vero?

Ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

trinity Profilo | Guru

Ok funziona...solo che ora devo chiedervi quello che mi serve come finale...i dati non li devo inserire in una gridview ma bensì in una combobox...mi spiego meglio

Ho 2 combobox una carica tutte le tipologie...poi nella seconda devo solo essere caricate le categorie che fanno parte della tipologia che scelgo prima...Te jeremy con l'ultimo codice che mi hai postato nelle 2 gridview vengono caricati indistintamente tutti i dati...come faccio a filtrare la cosa?

Ciao Fabio
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

Jeremy Profilo | Guru

Ciao Fabio.
Scusa il ritardo a risponderti, ma sono stato superimpegnato.
>Ho 2 combobox una carica tutte le tipologie...poi nella seconda
>devo solo essere caricate le categorie che fanno parte della >
>tipologia che scelgo prima...Te jeremy con
>l'ultimo codice che mi hai postato nelle 2 gridview vengono
>caricati indistintamente tutti i dati...come faccio a filtrare la cosa?
per esempio, basterebbe modificare il codice in questo modo .....
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Facci sapere...
Ciao
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5