Facendo dei test con Ajax ho avuto la necessita' di sviluppare la seguente classe.
Spero che sia utile a qualcuno. Sono ben accette considerazioni, suggerimenti, o critiche:
CLASSE: RsXmlParser() [versione lite]


sourceCode: ClassRsXmlParserLite.zip (18kb) con esempi ed un db access
questa classe ha la funzione di convertire un recordset in formato XML per l'esportazione.
Allo stesso modo é possibile leggere dal un file xml (che abbia la stessa struttura creata dal metodo di scrittura) ed ottenerne un recordset disconnesso.

La classe genera un xml valido (privo di DTD) e ben formattato secondo questa struttura
codice:
	<?xml version="1.0" encoding="UTF-8"?>
	<TABLE NAME="[TABLE NAME]" TYPE="['mdb'|'mysql']" FIELDKEY="[CAMPO CHIAVE PRIMARIA]">
		<STRUCTURE>
			<FIELD TYPE="[TIPO CAMPO]" TYPEDESC="[DESCRIZIONE TIPO]" DEFINEDSIZE="[SIZE DEFINITO]">[NOME CAMPO TABELLA]</FIELD>
			<FIELD TYPE="[TIPO CAMPO]" TYPEDESC="[DESCRIZIONE TIPO]" DEFINEDSIZE="[SIZE DEFINITO]">[NOME CAMPO TABELLA]</FIELD>
			....etc etc 
		</STRUCTURE>
		<ROW>
			<[NOME_CAMPO]>[CDATA[VALORE CAMPO]></[NOME_CAMPO]>
			<[NOME_CAMPO]>[CDATA[VALORE CAMPO]></[NOME_CAMPO]>
		</ROW>
	......etc etc 
	</TABLE>
nota: per il code di vbullettin non viene interpretato bene il CDATA che in realta è il seguente (l'ho spaziato):
< ! [ CDATA [ VALORE CAMPO ] ] >

esempio di output di un ipotetica tabella TBL_DATA con una query = "select * from tbl_data;" si ottiene un output simile:
codice:
<?xml version="1.0" encoding="UTF-8"?>
	<TABLE NAME="TBL_DATA" TYPE="MDB" KEYFIELD="KEY">
		<STRUCTURE>
			<FIELD TYPE="3" TYPEDESC="INT" DEFINEDSIZE="4">KEY</FIELD>
			<FIELD TYPE="202" TYPEDESC="TEXT" DEFINEDSIZE="50">TITOLO</FIELD>
			<FIELD TYPE="7" TYPEDESC="DATE" DEFINEDSIZE="8">DATA</FIELD>
		</STRUCTURE>
		<ROW>
			<KEY>[CDATA[1]></KEY>
			<TITOLO>[CDATA[Primo Titolo]></TITOLO>
			<DATA>[CDATA[04/08/2005 2.58.21]></DATA>
		</ROW>
		<ROW>
			<KEY>[CDATA[2]></KEY>
			<TITOLO>[CDATA[Secondo Titolo]></TITOLO>
			<DATA>[CDATA[04/08/2005 2.58.26]></DATA>
		</ROW>
		....etc etc
	</TABLE>
Le operazioni di conversione (e salvataggio) del recordset in formato Xml sono le seguenti:
codice:
	(1)
	
	<%
	Set xmlParser		= RsXmlParser
	strSql			= "Select * from tbl_data"
	Set Conn		= Server.CreateObject("Adodb.Connection")
	'questo é solo un esempio di stringa di connessione valida
	Conn.open		"PROVIDER=Microsoft.Jet.OleDb.4.0;Data Source=" & Server.MapPath("test.mdb")
	Set Rs			= conn.execute(strSql)
	Response.ContentType = "text/xml"
	xmlParser.RsToXml	Rs, "TBL_DATA ",xmlParser.Mdb,"KEY",xmlParser.ResponseAndBuffer
	obj.SaveXml 		 "testMdb.xml ",xmlParser.AllowOverwrite
	Conn.Close
	Set conn		= nothing
	Set Rs			= nothing
	%>
	
	nel caso utilizziate Mysql il discorso non cambia molto
	
	
	<% 
	Set xmlParser		= RsXmlParser
	strSql			= "Select * from tbl_data"
	Set Conn		= Server.CreateObject("Adodb.Connection")
	'questo è solo un esempio di stringa di connessione valida
	Conn.open		 "DRIVER={MySQL ODBC 3.51 Driver};SERVER=localhost;DATABASE=test;USER=test;PASSWORD=test;OPTION=3; "
	Set Rs			= conn.execute(strSql)
	Response.ContentType = "text/xml"
	xmlParser.RsToXml	 Rs, "TBL_DATA ",xmlParser.Mysql, "KEY ",xmlParser.ResponseAndBuffer
	obj.SaveXml 		"testMysql.xml",xmlParser.Overwrite
	Conn.Close
	Set conn		= nothing
	Set Rs			= nothing
	%>
per la lettura del file xml un esempio un po' + completo che illustra anche le altre proprieta':
codice:
	(2)
	
	<%
	Set obj		= new RsXmlParser
	Set myRs	= obj.XmlToRs("testMdb.xml",obj.FromFile)
	<html>
	....
	<body>
	Estrazione dal file:<%=obj.XmlFile%>
	</pre>
	<table border="1">
		<tr>
			<td>Nome: </td>
			<td><%=obj.TableName%></td>
			<td>Tipo: </td>
			<td><%=obj.DbType%></td>
			<td>Chiave Primaria: </td>
			<td><%=obj.TableKey%></td>
		</tr>
	</table>
	<tabl border="1">
		<tr>
		<%For Each Elm in myRs.Fields%>
			<td><%=elm.name%></td>
		<%next%>
		</tr>
	<%	while not myRs.eof%>
		<tr>
		<%For Each Elm in myRs.Fields%>
			<td><%=elm.value%></td>
		<%next%>
		</tr>
	<%		myRs.movenext
		wend %>
	</table>
	</body>
	</html>
	<%
	Set obj = nothing
	Set myRs = nothing  %>
DOM

METODO:

RsToXml
(ByRef Rs,TableName,DbType,TableKey,Operation)
converte un recordset passato per riferimento in xml valido secondo lo schema di cui sopra

PARAMETRI:
Rs (ADODB.RECORDSET) è il recordset precedentemente creato dall'utente

TableName (String) nome della tabella di estrazione

DbType (String) nome del tipo di mdb, valori possibili "MDB" o "MYSQL", è possibile usare le 2 costanti interne mdb e mysql che incapsulano il valore appropiato

TableKey (String) il nome del campo chiave della tabella

Operation (intero) è un intero che specifica il tipo di operazione:
valori possibili: 0 (pari alla costante ResponseNow) stampa direttamente in Response
1 (pari alla costante ResponseAndBuffer) stampa e salva nel buffer
2 (pari alla costante BufferOnly) salva nel buffer (l'xml sara' accessibile nell'oggetto interno Buffer

Es.
codice:
xmlParser.RsToXml Rs,"TBL_DATA"xmlParser.Mysql,"KEY",xmlParser.ResponseAndBuffer
oppure
codice:
xmlParser.RsToXml Rs,"TBL_DATA",xmlParser.Mdb,"KEY",xmlParser.ResponseNow
oppure
codice:
xmlParser.RsToXml Rs,"TBL_DATA",xmlParser.Mdb,"KEY",xmlParser.BufferOnly
........bla bla bla
Response.write(xmlParser.Buffer) 'stampa l'xml

METODO:
XmlToRs(FileOrString,operation)
converte un file xml (o una stringa ben formattata) con lo schema di cui sopra in un recordset disconnesso

PARAMETRI:
FileOrString (string) puo' essere sia il percorso di un file xml sia una stringa xml valido, a seconda del flag settato dal parametro operation
operation (int) è un intero che specifica se il parametro è un file oppure una stringa xml
valori possibili 0 (pari alla costante FromFile) che identifica che si intende caricare un file
o 1 (pari alla costante FromString) che identifica che sin intende caricare una stringa Xml

Es.
codice:
'Caricamento di un file Dim myRs
Set MyRs = xmlParser.XmlToRs("file.xml",xmlParser.fromFile)
oppure
codice:
Set MyRs = xmlParser.XmlToRs(myStringXml,xmlParser.fromString)
Nota: sia il file caricato che la stringa caricata devono rispecchiare la struttura di cui sopra
METODO:
SaveXml(File,overwrite)
salva il contenuto del buffer di lettura (aperto con RsToXml) su file

PARAMETRI:
File (string) il file che si intende salvare
overwrite (int) è un intero che specifica se il file puo' sovrascrivere l'eventuale file esistente
valori possibili:
2 (pari alla costante Overwrite) che nel caso sovrascrive
1 (pari alla costante NoOverwrite) che non permette la sovrascrizione
Esempio:
codice:
'Salvataggio del file con sovrascittura
xmlParser.SaveXml("pippo.xml",xmlParser.Overwrite) 'uguale a 2 '

Non sovrascrive (emette un output di errore nel caso esista) 
xmlParser.SaveXml("pippo.xml",xmlParser.NoOverwrite) 'uguale a 1
PROPRIETA':
TableName tipo: string

Il nome della tabella di estrazione, proprieta in sola lettura
(proprieta' in lettura, viene valorizzata alla chiamata dei 2 metodi RsToXml o XmltoRs)

PROPRIETA':
DbType tipo: string
Il tipo di database: MYSQL o MDB, il loro valore è incapsulato nelle costanti mdb e mysql
(proprieta' in lettura, viene valorizzata alla chiamata dei 2 metodi RsToXml o XmltoRs)



PROPRIETA':
TableKey tipo: string

Il nome del campo chiave primaria della tabella (proprieta' in lettura, viene valorizzata alla chiamata dei 2 metodi RsToXml o XmltoRs)

PROPRIETA':
XmlFile tipo: string

(proprieta' in lettura, viene valorizzata alla chiamata dei 2 metodi RsToXml o XmltoRs)

COSTANTI: (in realta' è una simulazione di costante)

Mdb tipo: string
valore "MDB" per essere utilizzata nella definizione del tipo di database

MySql tipo: string
valore "MySql" per essere utilizzata nella definizione del tipo di database

FromFile tipo: int
valore 0 per essere utilizzata nella chiamata al metodo XmlToRs

FromString tipo: int
valore 1 per essere utilizzata nella chiamata al metodo XmlToRs

ResponseNow tipo: int
valore 0 per essere utilizzata nella chiamata al metodo RsToXml , stampa tutto in Response.Write senza buffer

ResponseAndBuffer tipo: int
valore 1 per essere utilizzata nella chiamata al metodo RsToXml , stampa tutto in Response.Write senza buffer

SaveBuffer tipo: int
valore 2 per essere utilizzata nella chiamata al metodo RsToXml , salva l'xml nell'oggetto interno Buffer

Overwrite tipo: int
valore 2 per essere utilizzata nella chiamata al metodo SaveXml , salva l'xml nel file sovrascrivendolo

NoOverwrite tipo: int
valore 1 per essere utilizzata nella chiamata al metodo SaveXml , salva l'xml nel file solo se non esiste


Due piccoli test per la verifica della classe (solo MDB):

Test lettura db con output XML (1)
Test lettura XML e creazione recordset disconnesso (2)

Ps.
Ringrazio tanto imente (alias Mr. Splik , vedi 3d) per lo sviluppo e Baol74 perchè ho utilizzato la sua CstringBuilder (versione ado)