Ciao,
seppur tardivo eccoti un paio d'esempi su come fondere più files xml in un unico documento; si possono seguire 2 strade, ovvero:
- gestire i files come semplici files di testo, e quindi occuparci manualmente della concatenazione ponendo attenzione alla formattazione dei tag (cfr. es.1);
- gestire la fusione sfruttando le DOM-API (cfr. es.2);
La seconda strada è quella più ortodossa, ma necessita di alcune competenze di base da cui non è possibile prescindere.
Comunque, indipendentemente dalla soluzione seguita, l'approccio è sempre il medesimo:
- aprire il file di indice (<i>indice.txt</i>)
- leggerne il contenuto riga per riga, recuperando così un nome di file per volta
[in alternativa si potrebbero sostituire questi primi due punti, con la consultazione di una directory da cui estrarre tutti i nomi di files (*.xml)]
- caricare in memoria ogni documento ed accodarlo in un nuovo file (es.1) o in una nuova struttura dati (es.2)
- salvare il nuovo file/documento (<i>file.xml</i>)
*** ES.: 1
<code>
main( "indice.txt" , "file.xml" );
function main( ndxFile , xmlFile )
{
var fso,tmp,tmpFile;
fso = new ActiveXObject( "Scripting.FileSystemObject" );
if( fso.fileExists( ndxFile ) ) {
var txtNDX,txtXML,xmlDoc;
txtNDX = fso.openTextFile( ndxFile );
txtXML = fso.createTextFile( xmlFile );
txtXML.write( "<?xml version=\"1.0\"?><elencoFiles>" );
xmlDoc = new ActiveXObject( "MSXML.DomDocument" );
xmlDoc.async = false;
while( !txtNDX.atEndOfStream ) {
var buff = txtNDX.readLine();
if( buff != "" ) {
var buffer,bOk;
try {
xmlDoc.load( buff );
buffer = xmlDoc.documentElement.xml;
bOk = (buffer!="");
} catch( e ) {
bOk = false;
}
if( bOk ) {
txtXML.write( "<xmlDocument path=\"" + buff + "\">" );
txtXML.write( buffer );
txtXML.write( "</xmlDocument>" );
} else {
txtXML.write( "<xmlDocument path=\"" + buff + "\" nota=\"errore durante il caricamento!\"/>" );
}
}
}
txtXML.write( "</elencoFiles>" );
txtXML.close();
delete txtXML;
txtNDX.close();
delete txtNDX;
delete xmlDoc;
tmp = "Operazione completata!";
tmpFile = xmlFile;
} else {
tmp = "Impossibile reperire il file indice.";
tmpFile = ndxFile;
}
WScript.echo( tmp + "\n\nPath:\t" + tmpFile );
delete fso;
}
</code>
*** ES.: 2
<code>
main( "indice.txt" , "file.xml" );
function main( ndxFile , xmlFile )
{
var fso,tmp,tmpFile;
fso = new ActiveXObject( "Scripting.FileSystemObject" );
if( fso.fileExists( ndxFile ) ) {
var txtNDX,xmlDoc,xmlTmp;
txtNDX = fso.openTextFile( ndxFile );
xmlTmp = new ActiveXObject( "MSXML.DomDocument" );
xmlTmp.async = false;
xmlDoc = new ActiveXObject( "MSXML.DomDocument" );
xmlDoc.async = false;
xmlDoc.loadXML( "<?xml version=\"1.0\"?><elencoFiles/>" );
while( !txtNDX.atEndOfStream ) {
var buff = txtNDX.readLine();
if( buff != "" ) {
var bOk,ndDoc;
try {
var buffer;
xmlTmp.load( buff );
buffer = xmlTmp.documentElement.xml;
bOk = (buffer!="");
} catch( e ) {
bOk = false;
}
ndDoc = xmlDoc.createNode( 1,"xmlDocument","" );
ndDoc.attributes.setNamedItem( xmlDoc.createNode( 2,"path","" ) ).text = buff;
if( bOk ) {
ndDoc.appendChild( xmlTmp.documentElement.cloneNode(true) );
} else {
ndDoc.attributes.setNamedItem( xmlDoc.createNode( 2,"nota","" ) ).text = "errore durante il caricamento!";
}
xmlDoc.documentElement.appendChild( ndDoc );
}
}
txtNDX.close();
delete txtNDX;
delete xmlTmp;
xmlDoc.save( xmlFile );
delete xmlDoc;
tmp = "Operazione completata!";
tmpFile = xmlFile;
} else {
tmp = "Impossibile reperire il file indice.";
tmpFile = ndxFile;
}
WScript.echo( tmp + "\n\nPath:\t" + tmpFile );
delete fso;
}
</code>
ciao-ciao-ciao