Newsgroup: it.comp.lang.visual-basic
Titolo: Creare XML

Salve a tutti,
uso VB6 e devo esportare dei dati (tabella testa+righi) in un file XML.
Ho a disposizione un file XSD con la struttura.
Il file XSD posso "agganciarlo" per scrivere in maniera automatica l'xml?
Oppure serve solo per leggere un XML?
Per ora sto procedendo "a mano" devo fare forzatamente cosě? (mi basterebbe
sapere se sono completamente fuori strada per creare un XML)
Grazie a tutti, sono un po' con l'acqua alla gola :D
Il file in OUT č il seguente:
-----------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<Ricette xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance
"
xsi:noNamespaceSchemaLocation="XmlPrestazione1.7.xsd">
	<Header>Text</Header>
	<Telematico1>Text</Telematico1>
	<Telematico2>Text</Telematico2>
	<Telematico3>Text</Telematico3>
	<Testata>
		<RegStruttura>130</RegStruttura>
		<CodAsl>105</CodAsl>
	</Testata>
	<Ricetta>
		<FlagOperazione>T</FlagOperazione>
	</Ricetta>
</Ricette>
-----------------------------------------------------------------------
Ecco il codice:
-----------------------------------------------------------------------
    Dim node, attr, SubNode
    Dim dom As MSXML2.DOMDocument30
    Dim Frag As IXMLDOMDocumentFragment
    Set dom = CreateDOM
 
    ' Create a processing instruction targeted for xml.
    Set node = dom.createProcessingInstruction("xml", "version='1.0'
encoding='UTF-8'")
 
    dom.appendChild node
    Set node = Nothing
 
    ' Create the root element.
    Dim root As IXMLDOMElement
    Set root = dom.createElement("Ricette")
 
    dom.setProperty "SelectionNamespaces", ""
    root.setAttribute "xmlns:xsi",
"
http://www.w3.org/2001/XMLSchema-instance
"
    root.setAttribute "xsi:noNamespaceSchemaLocation",
"XmlPrestazione1.7.xsd"
    ' Add the root element to the DOM instance.
    dom.appendChild root
    ' Insert a newline + tab.
    root.appendChild dom.createTextNode(vbNewLine + vbTab)
 
    ' Create and add more nodes to the root element just created.
    ' Create a text element.
    Set node = dom.createElement("Header")
    node.Text = "Text"
    ' Add text node to the root element.
    root.appendChild node
    Set node = Nothing
      ' Add a newline plus tab.
    root.appendChild dom.createTextNode(vbNewLine + vbTab)
 
    Set node = dom.createElement("Telematico1")
    node.Text = "Text"
    root.appendChild node
    Set node = Nothing
    root.appendChild dom.createTextNode(vbNewLine + vbTab)
 
    Set node = dom.createElement("Telematico2")
    node.Text = "Text"
    root.appendChild node
    Set node = Nothing
    root.appendChild dom.createTextNode(vbNewLine + vbTab)
 
    Set node = dom.createElement("Telematico3")
    node.Text = "Text"
    root.appendChild node
    Set node = Nothing
    root.appendChild dom.createTextNode(vbNewLine + vbTab)
 
 
    ' Create an element to hold three empty subelements.
    Set node = dom.createElement("Testata")
    ' Create a document fragment to be added to node3.
    Set Frag = dom.createDocumentFragment
 
    'SubNode
    Frag.appendChild dom.createTextNode(vbNewLine + vbTab + vbTab)
    Frag.appendChild dom.createElement("RegStruttura")
    Frag.lastChild.Text = "130"
    Frag.appendChild dom.createTextNode(vbNewLine + vbTab + vbTab)
    Frag.appendChild dom.createElement("CodAsl")
    Frag.lastChild.Text = "105"
 
    Frag.appendChild dom.createTextNode(vbNewLine + vbTab)
    node.appendChild Frag
    Set Frag = Nothing
 
    root.appendChild node
    root.appendChild dom.createTextNode(vbNewLine + vbTab)
 
    Set node = dom.createElement("Ricetta")
    Set Frag = dom.createDocumentFragment
 
    Frag.appendChild dom.createTextNode(vbNewLine + vbTab + vbTab)
    Frag.appendChild dom.createElement("FlagOperazione")
    Frag.lastChild.Text = "T"
 
    Frag.appendChild dom.createTextNode(vbNewLine + vbTab)
    node.appendChild Frag
    Set Frag = Nothing
 
    root.appendChild node
    root.appendChild dom.createTextNode(vbNewLine)
 
    Set node = Nothing
 
    ' Save the XML document to a file.
    dom.save App.Path + "\dynamDom.xml"
    Set root = Nothing
    Set dom = Nothing
-----------------------------------------------------------------------
-- 
DBMS Firebird
VB6 + Ado

Purtroppo in VB6 non so proprio come gestire file XML, io uso Vbnet e li il 
file XSD serve solo per leggere velocemente un XML.
La scrittura viene da se mediante oggetti DataSet che a loro volta possono 
generare anche il file XSD.
Immagino che anche in VB6 il file XSD ti serva solo per la lettura, ma posso 
sbagliarmi ovviamente. 

 sbagliarmi ovviamente.
Capito. Alla fine scriverò come file di testo.
Sapete qual è la struttura "standard" per record multipli?
Cioè sarà così:
	<Ricetta>
		Dati Testa 1
		<Prestazione>
			DatiRigo 1
		</Prestazione>
		<Prestazione>
			DatiRigo 2
		</Prestazione>
	</Ricetta>
Oppure così?
	<Ricetta>
		Dati Testa 1
		<Prestazione>
			DatiRigo 1
			DatiRigo 2
		</Prestazione>
	</Ricetta>
Purtroppo ho un file di esempio ma ha una sola testa e 1 solo rigo :-/
Tnx



Cerca info sulla libreria MSXML, in particolare l'oggetto XMLDomDocument e
"figli".
Qui c'è un esempio:
http://builder.com.com/5100-6373-1044759.html
Bye
Raf
-----------------------------------------------------
Funk: cooler than the other side of the pillow.

 "figli".
Sisi, se scorri il mio primo post vedi l'esempio che ho utilizzato
(dovrebbe essere quello che hai indicato).
Però siccome il file dovrebbe essere semplice come struttura, e con MSXML
ho scritto #n mila righe per poche righe di XML, alla fine preferisco farlo
a mano come fosse un file. Complice il fatto che mi ci vorrà di più, e che
dal cliente dovrei (forse) installare la libreria MSXML.dll o quella che è
(anche se dovrebbero averla con office2003).
Trall'altro la cosa più complicata sarà codificare un cambo con
crittografia base64, ma per con 2 shell su OpenSSL.EXE faccio pure quello
:)


 quello :)
Mi sa che è la scelta migliore.
L'XSD a quanto mi risulta può essere usato solo come schema di validazione, in
VB6.
In .NET avresti molte più possibilità, come ti è già stato fatto notare.
-- 


 In .NET avresti molte più possibilità, come ti è già stato fatto notare.
Bhe sicuramente :), ma in pratica è una procedura di esportazione dati da
aggiungere ad un programma fatto tutto in VB6, quindi diventa impensabile
anche provare ad usarlo :)
