Newsgroup: it.comp.lang.visual-basic
Titolo: [VB6] File xml

Mi hanno chiesto di fare un programmino per creare il file xml per la 
fattura elettronica.
Ho scaricato l'esempio del file xml, non dovrebbe essere difficile fare 
un file di testo con tab e tag
 
è il file schema xsd per la lunghezza dei campi che non riesco a capire.
 
Esempio:
<xsd:simpleType name="MessageId_Type">
<xsd:restriction base="xsd:string">
<xsd:minLength value="1"/>
<xsd:maxLength value="14"/>
</xsd:restriction>
Questo dovrebbe essere un campo stringa di 14 caratteri
 
================
<xsd:element type="xsd:positiveInteger" name="PosizioneFattura" 
maxOccurs="1" minOccurs="0"/>
Ma questo che significa che devo mettere 0 se non è valorizzato?
 
Carmelo

 Ma questo che significa che devo mettere 0 se non è valorizzato?
 
che "PosizioneFattura" può essere indicato 0 o al massimo 1 volta e deve 
contenere un intero positivo.
Però mi sembra che questi facciano parte dello schema dei messaggi di 
ritorno e no della fattura che tu invii.
 
ciao
stefano
 

 
 
Vuol dire che è un elemento opzionale; può comparire al massimo una volta, ma se non è valiorizzato può essere omesso del tutto (nel senso che puoi evitare anche di scrivere il tag <PosizioneFattura></PosizioneFattura>)
 
Per inciso, questa è una di quelle cose per cui varrebbe la pena prendere il primo 
VB.NET
 Express che capita, e scrivere una piccola class library per l'occasione, che puoi referenziare poi nel tuo programma VB6...
Questo tipo di cose qui in .NET si scrivono praticamente da sole: gli dai in pasto il file XSD, ti genera una classe preconfezionata (ma modificabile a piacimento), e con due righe di codice si serializzi da oggetto in memoria a file XML.
 


Io ho il vb2008 ma non so come fare.
Ho aperto un progetto librerie di classi e ora?
 
Carmelo

Il 25/03/15 15:42:58 Luca D ha scritto:

Ma non c'è un editor visuale per fare questi files e poi darli in pasto 
al vb6, un po come si faceva con crystal report
 
-- 
Greg
 
 


L'intero procedimento non è banale cosi' in due parole, comunque detto molto sinteticamente:
 
- Nelle opzioni del progetto, 'Assembly information', marca la voce 'Make assemmbly COM visible' e in 'Compile' marca 'Register for COM interop'
 
- Dal prompt dei comandi di Visual Studio esegui
"xsd <il tuo file>.xsd /c /l:vb"
dal quale otterrai <il tuo file>.vb con l'equivalente, sotto forma di classi VB, di tutti gli oggetti descritti nello schema
 
- Includi quel file nel progetto e compila
 
A questo punto, la libreria e le relative classi dovrebbero essere registrate e utilizzabili nei 'Riferimenti' di un progetto VB6... chiaramente, a seconda dei tipi di dato contenuti nel XSD, potrebbe essere necessario adattarle per compatibilità a VB, aggiungere attributi per pilotare la serializzazione, così come creare altre classi di supporto e via dicendo.
 
Per ottenere il file XML risultante (di nuovo, la sto facendo molto corta, ma la sostanza è questa), è sufficente popolare dal codice VB6 l'oggetto con i dati necessari e richiamare un metodo, da definire in una delle tue classi .NET, simile a
 
   Sub SaveAsXML(ByVal obj As Object, ByVal fileName As String)
      Dim objStreamWriter As New IO.StreamWriter(fileName)
      Dim x As New XmlSerializer(obj.GetType)
      x.Serialize(objStreamWriter, obj)
      objStreamWriter.Close()
   End Sub
 
e ottieni l'intera struttura dei tag XML e i relativi dati senza bisogno di altro


 
Guarda, ti consiglio di studiarti l'interoperabilità .NET/COM e di fare 
il pezzo di generazione utilizzando gli assembly .net per l'xml in C#.
 
Su VB6 ci sono i vecchi parser XML microsoft ma rispetto a .net c'è la 
sono attrezzi primitivi.
 
fe...@delenda.net
 
-- 
I'm Boethius, author of the Consolation of Philosophy. It's my belief 
that history is a wheel. "Inconsistency is my very essence" -says the 
wheel- "Rise up on my spokes if you like, but don't complain when you 
are cast back down into the depths. Good times pass away, but then so do 
the bad. Mutability is our tragedy, but it is also our hope. The worst 
of times, like the best, are always passing away".
http://delendanet.blogspot.com