Accedere ad un File XML con ASP
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
%>
Chiarissima esposizione.
Chiedo però che sia necessario specificare come estrarre i figli di ciascun nodo “prodotto”, dipendenti dal valore dell’id specificato.
Ciao Luciano,
per selezionare tutti i figli del nodo “prodotto[@id='2']” è sufficiente riscrivere l’espressione XPath in questo modo:
listaprodotti/prodotto[@id='2']/*
oppure nel caso in cui si vogliano selezionare tutti i nodi figlio con un determinato nome:
listaprodotti/prodotto[@id='2']/nomeNodoFiglio