Ho risolto. Chiunque fosse interessato può usufruire del codice che ho prodotto.
Struttura XML desiderata:
codice:
<?xml version="1.0" encoding="UTF-8" ?>
<utenti>
<utente ID="12345">
<nome><![ CDATA[ Mario ]]></nome>
<cognome><![CDATA[ Rossi ]]></cognome>
<recapiti>
<telefono>123456789</telefono>
<fax>147258369</fax>
<email><![CDATA[ mario.rossi@esempio.com ]]></email>
</recapiti>
<funzione><![CDATA[ Responsabile M&A ]]></funzione>
</utente>
</utenti>
Soluzione:
codice:
<%
Const strXMLPath = "C:\Inetpub\wwwroot\XML\"
Const strXML_filename = "file_esempio.xml"
Dim objXMLDom
Dim objRoot
Dim objNodo
Dim objNodoFiglio
Dim strNomeNodo
Dim strValore
Dim iCDATA
Dim strAttributo
Dim strValoreAttributo
Dim objUtente
Dim objRecapiti
' /// FUNZIONI XML
' /// Nodo
Function CreaNodo( objNodo, strNomeNodo, strValore, iCDATA )
Set objNodoFiglio = objNodo.AppendChild( objXMLDom.createElement( strNomeNodo ) )
If Not isEmpty( strValore ) Then
If iCDATA = 0 Then
objNodoFiglio.text = strValore
Else
objNodoFiglio.AppendChild objXMLDom.createCDATASection( strValore )
End If
End If
End Function
' /// Attributi
Function Attributi( strAttributo, strValoreAttributo )
objNodoFiglio.setAttribute strAttributo, strValoreAttributo
End Function
' /// CREAZIONE OGGETTO
Set objXMLDom = Server.CreateObject("MSXML2.DOMDocument")
' /// DICHIARAZIONE XML
objXMLDom.appendChild objXMLDom.createProcessingInstruction("xml", "version=""1.0"" encoding=""UTF-8""")
' /// ELEMENTO RADICE
Call CreaNodo( objXMLDom, "utenti", "", 0 ) ' 0 = testo ; 1= CDATA
Set objRoot = objNodoFiglio
' /// ELEMENTI UTENTE
Call CreaNodo( objRoot, "utente", "", 0 ) ' 0 = testo ; 1= CDATA
Set objUtente = objNodoFiglio
Call Attributi ( "ID", "12345" )
Call CreaNodo( objUtente, "nome", "Mario", 1 ) ' 0 = testo ; 1= CDATA
Call CreaNodo( objUtente, "cognome", "Rossi", 1 ) ' 0 = testo ; 1= CDATA
Call CreaNodo( objUtente, "recapiti", "", 0 ) ' 0 = testo ; 1= CDATA
Set objRecapiti = objNodoFiglio
Call CreaNodo( objRecapiti, "telefono", "123456789", 0 ) ' 0 = testo ; 1= CDATA
Call CreaNodo( objRecapiti, "fax", "147258369", 0 ) ' 0 = testo ; 1= CDATA
Call CreaNodo( objRecapiti, "email", "mario.rossi@esempio.com", 1 ) ' 0 = testo ; 1= CDATA
Call CreaNodo( objUtente, "funzione", "Responsabile M&A", 1 ) ' 0 = testo ; 1= CDATA
' /// SALVATAGGIO e PULIZIA DEGLI OGGETTI
objXMLDom.save Trim(strXMLPath & strXML_filename)
Set objXMLDom = Nothing
Set objRoot = Nothing
Set objNodo = Nothing
Set objNodoFiglio = Nothing
Set objUtente = Nothing
Set objRecapiti = Nothing
%>
Ad ogni modo non sono completamente soddisfatto, per cui rilancio a qualche buonanima l'invito ad aiutarmi a ottimizzare questa soluzione. Il risultato che vorrei raggiungere è quello di evitare di dover creare oggetti per ogni elemento genitore.
C'è un modo per appendere il nuovo elemento passando il nome dell'elemento genitore? In questo modo la funzione verrebbe ottimizzata ulteriormente a beneficio dell'intera soluzione, specie per strutture XML molto complesse.
Ciao ;-)