Aggiornare File XML con ASP: Introduzione
Aggiornare file XML tramite ASP è un’operazione molto semplice. L’oggetto necessario per svolgere il compito è, come d’abitudine, il MSXML2.DOMDocument.4.0. Per quanto riguarda i metodi da utilizzare dobbiamo fare una distinzione fra quelli che riguardano l’aggiornamento e quelli che riguardano invece l’aggiunta di nuovi nodi.
Nota: il codice XML che utilizzerò per gli esempi di questo articolo è ripreso dall’intervento Accedere ad un File XML con ASP. Per rendere la lettura più semplice riporto comunque il codice:
<?xml version="1.0" encoding="iso-8859-1"?> <listaprodotti> <prodotto id="1" nome="Sum41 - Does this look infected">Ultimo album del famoso gruppo punk-rock</prodotto> <prodotto id="2" nome="Iron Maiden - The best of the beast">Album fantastico!</prodotto> </listaprodotti>
Aggiornamento di nodi o attributi già esistenti
E’ relativamente semplice aggiornare un file XML. Il metodo più pratico è riportato nel listato seguente:
<%
'Oggetto XML
Set objXML = Server.CreateObject("Msxml2.DOMDocument.4.0")
'Carico i dati XML
objXML.async = False
objXML.load(Server.MapPath("esempio.xml"))
'Procedo all'aggiornamento
set objData = objXML.selectSingleNode("listaprodotti/prodotto[@id='1']")
objData.Text = "Testo del nodo aggiornato...... w minifloppy.it!"
set objData = nothing
objXML.Save(Server.MapPath("esempio.xml"))
'Pulizia
Set objXML = nothing
%>
In questo modo il contenuto del nodo listaprodotti/prodotto[@id='1'] verrà sovrascritto. Se volessimo soltanto aggiungere del testo al nodo selezionato, basterà modificare in questo modo il codice precedente:
<% '... objData.Text = objData.Text &"Testo del nodo aggiornato...... w minifloppy.it!" '... %>
Creazione di nuovi nodi e attributi
Partiamo anche questa volta dalla pratica:
<%
'Oggetto XML
Set objXML = Server.CreateObject("Msxml2.DOMDocument.4.0")
'Aggiungo il nodo
Set MyNode = objXML.createElement("prodotto")
MyNode.setAttribute "id", "3"
MyNode.setAttribute "nome", "Punkreas - Falso"
MyNode.Text = "Il miglior lavoro di uno dei migliori gruppi punk italiani"
objXML.documentElement.appendChild(MyNode)
set MyNode = nothing
objXML.Save(Server.MapPath("esempio.xml"))
'Pulizia
Set objXML = nothing
%>
Come potete osservare, dopo aver creato il nuovo elemento (objXML.createElement(”prodotto”)), gli assegnamo i due attributi id e nome tramite il metodo .setAttribute. Gli assegnamo del testo utilizzando la proprietà vista anche precedentemente, ovvero .Text. Infine procediamo all’aggiunta del nuovo nodo, posizionandolo in questo caso nel root, tramite objXML.documentElement.appendChild(MyNode).
Ottimi esempi, ma quando provo l’inserimento di un nuovo nodo, ho il seguente messaggio di errore:
Microsoft VBScript runtime error ‘800a01a8′
Object required: ‘objXML.documentElement’
/new/public/add.asp, line 10
potresti darmi una mano a capire di cosa si tratta?
Ciao Ivan,
l’errore che hai è abbastanza frequente. Di solito si verifica quando un cerchi di eseguire un’operazione su un oggetto che non esiste. Nel tuo caso controlla che il file XML che utilizzi (nel caso non sia quello di esempio allegato all’articolo) contenga effettivamente l’elemento di root.
Nel caso non sia questo il problema prova a dare un’occhiata qui: http://classicasp.aspfaq.com/general/why-do-i-get-the-error-object-required.html. E’ una raccolta di situazioni che possono portare a quell’errore.