Accedere ad un File XML con ASP

14 maggio 2007 | Sviluppo Web | 2 Commenti

Di seguito è riportato il codice XML che userò anche in futuro, nel corso di altri articoli:

<?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>

La struttura come potete vedere è molto semplice e consiste nell’elemento radice “listaprodotti” e nei due elementi figli “prodotto”. Questi ultimi hanno tre attributi: “id”, “nome” e “descrizione”.

Per cominciare apriamo il documento XML servendoci dell’oggetto Msxml2.DOMDocument.4.0:

<%
Set objXML = Server.CreateObject("Msxml2.DOMDocument.4.0")

'Carico i dati XML
objXML.async = False
objXML.load("esempio.xml")
%>

Fatto questo, MSXML 4.0 ci fornisce principalmente due funzioni per leggere dati da un file xml, vediamole:

  • selectSingleNode(”node”): esegue la query e seleziona il primo nodo trovato che soddisfi le condizioni. Se nessun nodo viene trovato l’oggetto è nullo. Esempio:
    <%
    set objData = objXML.selectSingleNode("listaprodotti/prodotto")
    Response.Write(objData.Text)
    set objData = nothing
    %>
    
  • getElementsByTagName(”tagName”): esegue la query e restituisce come risultato una collection di elementi aventi lo stesso nome. Possiamo inserire un asterisco (”*”) al posto del nome del tag per selezionare tutti i nodi del documento. Esempio:
    <%
    set objData = objXML.getElementsByTagName("listaprodotti/prodotto")
    
    For i = 0 To (objData.length - 1)
        Response.Write(objData.Item(i).xml)
    Next
    
    set objData = nothing
    %>
    

Ci serviremo della prima quando occorrerà trovare un solo risultato, mentre della seconda quando occorrerà selezionare più elementi.

Di seguito è riportato un esempio chiarificatore che selezionerà l’elemento “prodotto” con id uguale a 2 e stamperà a video la descrizione:

<%
Set objXML = Server.CreateObject("Msxml2.DOMDocument.4.0")

'Carico i dati XML
objXML.async = False
objXML.load("esempio.xml")

'Seleziono l'oggetto
set objData = objXML.selectSingleNode("listaprodotti/prodotto[@id='2']")

Response.Write(objData.Text)

set objData = nothing

'Pulizia
Set objXML = nothing
%>