Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di mjungle
    Registrato dal
    Mar 2002
    Messaggi
    173

    creare un file xml ex novo con l'oggetto DOM

    Ciao a tutti.
    Vorrei creare un file XML ex novo con l'oggetto DOM, ma non sono riuscito a trovare della documentazione per pagine asp.

    Il file che voglio creare ha questa semplice struttura:

    codice:
    <?xml version="1.0" encoding="UTF-8"?>
    <annuncio>
    	<agenzia>
    		<id></id>
    		<ragione_sociale> <![CDATA[ ]]> </ragione_sociale>		
    	</agenzia>		
    </annuncio>
    L'elemento "ragione_sociale" deve essre di tipo CDATA.
    Qualcuno potrebbe darmi dei suggerimenti?

    Grazie mille!

  2. #2
    Utente di HTML.it L'avatar di mjungle
    Registrato dal
    Mar 2002
    Messaggi
    173
    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 ;-)

  3. #3
    usa byref nelle function invece di quelle variabili globali, in maniera per esempio da non dover fare quella cosa strana con objNodofiglio o come si chiama, ma fare tipo:

    codice:
    dim mionodo
    
    function creaNodo(byref nodo, ..)
    
    set nodo=..
    
    end function
    
    'call function
    creaNodo(mionodo) 'da ora mio nodo sarà un oggetto
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  4. #4
    Utente di HTML.it L'avatar di mjungle
    Registrato dal
    Mar 2002
    Messaggi
    173
    Non ho colto il suggerimento.
    Potresti essere più chiaro, per favore?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.