Dtemi sei è una cosa possibile (ossia se la struttura non è errata) e ...

venerdì 16 marzo 2012 - 09.55

trinity Profilo | Guru

salve ragazzi,

voglio solo chiedere una cosa perchè a questo punto dopo tantissime prove mi viene da pensare se in vb net è possibile creare una struttura xml come questa che andrò a postare. Se è possibile vi chiedo di farmi vedere come fare perchè tutti i codic che ho scritto come ripeto mi portano ad una struttura diversa:


<?xml version="1.0" encoding="UTF-8"?> <messaggio-otlazio> <report id-struttura="33" anno="2011" mese="11" giorno="1"> <riepilogo-giornaliero> <riga provenienza="18" partenze="1" arrivi="1"> <anag-visitatore> <sesso>ND</sesso> <data-nascita>1967-08-13</data-nascita> <professione>Libero professionista</professione> <tipo-soggetto>SoggettoSingolo</tipo-soggetto> <numero-componenti>2</numero-componenti> <motivo-visita>ND</motivo-visita> <prossima-visita>ND</prossima-visita> </anag-visitatore> </riga> <riga provenienza="LT" partenze="0" arrivi="2"> <anag-visitatore> <sesso>ND</sesso> <data-nascita>1970-07-22</data-nascita> <professione>Pensionato</professione> <tipo-soggetto>Familiare-MembroGruppo</tipo-soggetto> <numero-componenti>1</numero-componenti> <motivo-visita>ND</motivo-visita> <prossima-visita>ND</prossima-visita> </anag-visitatore> </riga> <capacita-giornaliera> <n-letti-disponibili>10</n-letti-disponibili> <n-camere-disponibili>7</n-camere-disponibili> <n-camere-occupate>1</n-camere-occupate> </capacita-giornaliera> </riepilogo-giornaliero> <capacita-mensile> <n-letti-disponibili>10</n-letti-disponibili> <n-camere-disponibili>7</n-camere-disponibili> <n-bagni>7</n-bagni> <n-giorni-apertura>30</n-giorni-apertura> </capacita-mensile> </report> <credenziali> <id-struttura>33</id-struttura> <chiave>prova</chiave> </credenziali> </messaggio-otlazio>

ho anche il file xsd ma non so come utilizzarlo...Calcolate che i dati riportati nel file xml io dovrò ricavarli da un db sql ma la query che mi esegue la selezione è già pronta.
Inoltre ditemi semmai questa struttura è impossibile da riprodurre e quindi errata perchè è una ditta che mi ha chiesto questa tipologia di xml non l'ho scelta io

Ciao

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

Vinsent Profilo | Senior Member

Per il tuo "mi viene da pensare" penso di poterti rispondere che pensi proprio male...in .NET la gestione degli XML mi sembra fin troppo vasta e complessa...personalmente e da programmatore della "domenica" fatico moooolto a stargli dietro...
Per creare un XML come quello indicato basta usare classi e relativi metodi di System.Xml:
http://msdn.microsoft.com/it-it/library/system.xml.aspx
nel senso che basta creare il documento, aggiungere nodi, figli, attributi, ecc...
Invece, per quanto riguarda il file xsd dei tuoi topic precedenti, l' ho trovata una cosa molto interessante e ho cercato di approfondire.
Esiste un programma chiamato xsd.exe, se fai una ricerca nei file del pc lo trovi...sul mio con Vista si trova in:
C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin
Lo devi avviare da shell, per comodità l' ho "copincollato" su una cartella in C...
In pratica è in grado di creare il codice per un usercontroll derivato da dataset partendo da un file xsd, per le altre funzioni leggi qui:
http://msdn.microsoft.com/it-it/library/x6c1kb0s.aspx
Non entro nel merito del tuo problema perchè è troppo impegnativo per me...inoltre non mi paga nessuno ...quindi ti mostro come ho fatto per gestire un semplice XML come questo:
<?xml version="1.0" standalone="yes"?> <impostazioni> <impostazione> <nome>abcd</nome> </impostazione> </impostazioni>
NB: l' eseguibile e i file si trovano tutti nella cartella in C che ho creato.
Da shell avvio xsd.exe...
gli passo il comando e il file XML per creare l' XSD:
xsd impostazioni.xml
nella cartella si genera il file impostazioni.xsd:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
passo il comando per creare il codice:
xsd /dataset /language:VB impostazioni.xsd
nella cartella si genera il file impostazioni.vb, lo apro con "blocco note" e copio tutto per incollarlo in una classe aggiunta al progetto.
Compilo il progetto.
A questo punto in "modalità progettazione" nella "casella degli strumenti" trovo il controllo "impostazioni" che trascino sul form, il controllo aggiunto si chiama 'impostazioni1'...
Per aggiungere una riga basta:
impostazioni1.impostazione.Rows.Add("asdf")
Ti allego lo zip del progetto di esempio che alla pressione del button aggiunge delle righe al dataset (impostazioni1), popola un datagridview e scrive un file XML sul desktop.
La via credo di avertela indicata, per il resto devi provvedere tu...

PS: xsd.exe non "digerisce" il file xsd che avevi postato...


trinity Profilo | Guru

Ciao,
prima di tutto grazie per l'aiuto, allora ho creato il file .vb ma il mio xsd è molto articolato e non riesco a trovare il modo di aggiungere valori nella colonne delle tabelle.
Ti allego sia il file xsd che il file .vb.
Potresti solo aiutarmi e farmi vedere come caricare i valori per esempio sul nodo report poi vedendo come hai fatto il resto penso che potrei farlo da solo.

in pratica il file xml dovrebbe uscire così:


<?xml version="1.0" encoding="UTF-8"?> <messaggio-otlazio> <report id-struttura="33" anno="2011" mese="11" giorno="1"> <riepilogo-giornaliero> <riga provenienza="18" partenze="1" arrivi="1"> <anag-visitatore> <sesso>ND</sesso> <data-nascita>ND</data-nascita> <professione>Libero professionista</professione> <tipo-soggetto>SoggettoSingolo</tipo-soggetto> <numero-componenti>2</numero-componenti> <motivo-visita>ND</motivo-visita> <prossima-visita>ND</prossima-visita> </anag-visitatore> </riga> <capacita-giornaliera> <n-letti-disponibili>10</n-letti-disponibili> <n-camere-disponibili>7</n-camere-disponibili> <n-camere-occupate>1</n-camere-occupate> </capacita-giornaliera> </riepilogo-giornaliero> <capacita-mensile> <n-letti-disponibili>10</n-letti-disponibili> <n-camere-disponibili>7</n-camere-disponibili> <n-bagni>7</n-bagni> <n-giorni-apertura>30</n-giorni-apertura> </capacita-mensile> </report> <credenziali> <id-struttura>33</id-struttura> <chiave>pippo</chiave> </credenziali> </messaggio-otlazio>

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

Vinsent Profilo | Senior Member

Così:
Dim anno As String = "2011" Dim id_istruttura As String = "32" Dim mese As String = "11" Dim giorno As String = "1" NewDataSet1.Tables("report").Rows.Add(id_istruttura, anno, mese, giorno)

Per ottenere tutte le tabelle e relative colonne basta che dai un' occhiata...ai tuoi file postati o cicli il dataset per ottenere tabelle e colonne:

For a = 0 To NewDataSet1.Tables.Count - 1 Console.WriteLine("tabella: " & NewDataSet1.Tables(a).ToString) For b = 0 To NewDataSet1.Tables(a).Columns.Count - 1 Console.WriteLine(" colonna: " & NewDataSet1.Tables(a).Columns(b).ToString) Next Next

Comunque, nel tuo caso, utilizzare un dataset credo non vada bene...a questo punto penso sia inutile continuare "qui"...ti rispondo nel nuovo topic che hai aperto.

trinity Profilo | Guru

Grazie mille del tuo aiuto ma alla fine ho seguito il tuo primo consiglio ossia msdn alla mano ed utilizzando la classe xmldocument e ho costruito l'xml a mano sapendo cmq le tabelle e quindi i nodi...
Poi appena finisco il progettino posto con commenti la creazione del file xml in modo tale da poter aiutare altri che potrebbero stare nella mia stessa condizione

Ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com
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