Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[VB6] File xml

465 views
Skip to first unread message

Carmelo

unread,
Mar 25, 2015, 10:18:34 AM3/25/15
to
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

Stefano Ferrari

unread,
Mar 25, 2015, 10:38:12 AM3/25/15
to
Il 25/03/2015 15:18, Carmelo ha scritto:
> 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

già i tab li lascerei perdere :-)

> 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

questo contiene una stringa con lunghezza minima 1 carattere e lunghezza
massima 14

>
> ================
> <xsd:element type="xsd:positiveInteger" name="PosizioneFattura"
> maxOccurs="1" minOccurs="0"/>
> 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

Luca D

unread,
Mar 25, 2015, 10:42:58 AM3/25/15
to
Il giorno mercoledì 25 marzo 2015 15:18:34 UTC+1, Carmelo ha scritto:
> <xsd:element type="xsd:positiveInteger" name="PosizioneFattura"
> maxOccurs="1" minOccurs="0"/>
> Ma questo che significa che devo mettere 0 se non è valorizzato?
>

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.

Carmelo

unread,
Mar 25, 2015, 11:43:58 AM3/25/15
to
Io ho il vb2008 ma non so come fare.
Ho aperto un progetto librerie di classi e ora?

Carmelo

Greg

unread,
Mar 25, 2015, 11:45:29 AM3/25/15
to
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


Luca D

unread,
Mar 25, 2015, 1:44:24 PM3/25/15
to
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

fe...@delenda.net

unread,
Apr 2, 2015, 10:15:37 AM4/2/15
to
Il 25/03/2015 16:45, Greg 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
>

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
0 new messages