Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [VB2005]File XML
Forum - C# / VB.NET - [VB2005]File XML

Avatar
sergio58 (Normal User)
Rookie


Messaggi: 38
Iscritto: 05/08/2008

Segnala al moderatore
Postato alle 12:24
Giovedì, 11/09/2008
Salve a tutti, vi scrivo per un problema con cui sto combattendo da più di una settimana.
Praticamente non riesco a costruire la classe per ottenere un file xml strutturato come segue:
Questo è il risultato che vorrei:
Codice sorgente - presumibilmente Plain Text

  1. <Elenco>
  2.   <Campi>
  3.     <Campo Name=RagSociale type="string" lenght="30"/>
  4.      <Campo name=Via type="string" lenght="50"
  5.      <Campo name=citta type="string" lenght="50"
  6.    </Campi>
  7.    <RigaLista>
  8.     <Riga RagSociale="PieroTofy" Via="Via Italia" Citta="Roma"
  9.   ecc.
  10.   ecc.
  11.   <\RigaLista>



Con il seguente codice riesco ad ottenere il file XML strutturato come appresso.
Codice sorgente - presumibilmente VB.NET

  1. Imports System
  2. Imports System.IO
  3. Imports System.Xml
  4. Imports System.Xml.Serialization
  5. Imports System.Xml.Schema.XmlSchemaComplexType
  6. Public Class Form1
  7.     <XmlRootAttribute("Allegati_Clienti_Fornitori")> _
  8.     Public Class DatiElenco
  9.         Public Record As Campi
  10.  
  11.  
  12.     End Class
  13.     Public Class Campi
  14.         <XmlAttribute()> _
  15.         Public RagSociale As String
  16.         Public Indirizzo As String
  17.         Public Citta As String
  18.     End Class
  19.  
  20.  
  21.     Private Sub CreaFile()
  22.  
  23.         Dim RigaCampi As New Campi
  24.         Dim All As New DatiElenco
  25.  
  26.         RigaCampi.RagSociale = "PieroTofy"
  27.         RigaCampi.Indirizzo = "Via"
  28.         RigaCampi.Citta = "Roma"
  29.         All.Record = RigaCampi
  30.  
  31.         Dim writer As New System.Xml.Serialization.XmlSerializer(GetType(DatiElenco))
  32.         Dim file As New System.IO.StreamWriter("c:\ElencoCliFor.xml")
  33.         writer.Serialize(file, All)
  34.         file.Close()
  35.  
  36.     End Sub
  37.     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  38.         CreaFile()
  39.     End Sub
  40. End Class


Output:
Codice sorgente - presumibilmente Plain Text

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. - <Allegati_Clienti_Fornitori xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  3. - <Record RagSociale="PieroTofy">
  4.   <Indirizzo>Via</Indirizzo>
  5.   <Citta>Roma</Citta>
  6.   </Record>
  7.   </Allegati_Clienti_Fornitori>


Sapete darmi indicazione per andare avanti ?

Ultima modifica effettuata da Il Totem il 11/09/2008 alle 13:03
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 13:06
Giovedì, 11/09/2008
Io di XML so giusto quello che bisogna sapere, ma, guardando il tuo codice, mi sembra che per quello che vuoi ottenere, dovresti costruire le classi in questo modo:
Codice sorgente - presumibilmente VB.NET

  1. <XmlRootAttribute("Allegati_Clienti_Fornitori")> _
  2.     Public Class DatiElenco
  3.         Public Campi As New List(Of Campo)
  4.     End Class
  5.  
  6.     Public Class Campo
  7.         <XmlAttribute()> _
  8.         Public RagSociale As String
  9.         <XmlAttribute()> _
  10.         Public Indirizzo As String
  11.         <XmlAttribute()> _
  12.         Public Citta As String
  13.     End Class


PM Quote
Avatar
sergio58 (Normal User)
Rookie


Messaggi: 38
Iscritto: 05/08/2008

Segnala al moderatore
Postato alle 13:47
Giovedì, 11/09/2008
Grazie della pronta risposta, lo provo e ti faccio sapere.Ma per la prima parte , quella dove si fanno le assegnazioni come debbo impostarla?.
Scusa se non ho capito , ma sono proprio alle prime armi con XML.
sergio

PM Quote
Avatar
sergio58 (Normal User)
Rookie


Messaggi: 38
Iscritto: 05/08/2008

Segnala al moderatore
Postato alle 21:41
Giovedì, 11/09/2008
In precedenza ho dimenticato di dire che nel form c'è una listview , i cui valori delle righe dovranno essere registrate nel file XML.
Detto questo ho inserito il codice, ma per la poca conoscenza non sono andato oltre perchè mi da un errore nella costruzione della classe che riporto:
Private Sub CreaFile()
        Dim RigaCampi As New Campo
        Dim All As New DatiElenco1
        RigaCampi.RagSociale = "PieroTofy"
        RigaCampi.Indirizzo = "Via"
        RigaCampi.Citta = "Roma"
        All.Campi = RigaCampi<- errore
        Dim writer As New System.Xml.Serialization.XmlSerializer(GetType(DatiElenco1))
        Dim file As New System.IO.StreamWriter("c:\ElencoCliFor.xml")
        writer.Serialize(file, All)
        file.Close()
    End Sub
Praticamente non riesco ad associare la lista alla classe,  , quando fsccio All.Campi=RigaCampi
Errore del Tipo Impossibile convertire il valore di tipo..... in .....
Sergio


PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 10:37
Venerdì, 12/09/2008
E' evidente che non puoi conertire Campo in List(Of Campo). Se non conosci le liste:
http://totem.altervista.org/guida/versione2/A16.php
e se non conosci le liste generics:
http://totem.altervista.org/guida/versione2/A41.php
La sintassi corretta è:
Codice sorgente - presumibilmente Plain Text

  1. All.Campi.Add(RigaCampi)


PM Quote
Avatar
sergio58 (Normal User)
Rookie


Messaggi: 38
Iscritto: 05/08/2008

Segnala al moderatore
Postato alle 14:18
Venerdì, 12/09/2008
Grazie Totem, è proprio quello che mi serviva.
La prima parte cerco di inserirla manualmente:k:

PM Quote
Avatar
sergio58 (Normal User)
Rookie


Messaggi: 38
Iscritto: 05/08/2008

Segnala al moderatore
Postato alle 14:55
Venerdì, 12/09/2008
:k:

Ultima modifica effettuata da sergio58 il 12/09/2008 alle 15:49
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 10:37
Sabato, 13/09/2008
Bene, allora posso chiudere se abbiamo finito.

PM Quote