Newsgroup: it.comp.lang.javascript
Titolo: [REQ] Caricare un file XML ed utilizzarlo come DOM

Ciao a tutti, ho un problema di compatibilità "cross-browser" con
una funzione copia-e-incollata da w3schools, che dovrebbe permettermi di 
aggirare le differenti implementazioni del DOMDocument da browser a browser.
Qualcuno di voi saprebbe indicarmi qual'è il metodo corretto per 
caricare da file, quindi con qualcosa del tipo 
XMLDocument.load(nomefile), ammettendo di riuscire (e qui chiedo il 
vostro aiuto) di istanziare questo XMLDocument in maniera completamente 
indipendente dall'architettura su cui gira il mio javascript.
Vi posto la funzione che utilizzo al momento (e che non da' il risultato 
sperato):
function loadXMLDoc(dname)
{
     if (document.implementation && document.implementation.createDocument)
     {
         xmlDoc = document.implementation.createDocument("", "", null);
         alert(xmlDoc);
     }
     else if (window.ActiveXObject)
     {
         xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
         alert(xmlDoc);
      }
     else
     {
         alert('Your browser can\'t handle this script');
         return;
     }
     xmlDoc.load(dname);
     return xmlDoc;
}
Internet explorer 7 mi restituisce: "il server di automazione non può 
creare l'oggetto".
Firefox 3 sembra crearlo, ma quando poi creo un nodo da "appendere"
a questo DOM, non mi vede il nodo come un NodeElement..
vi ringrazio per qualsiasi suggerimento.

 caricare da file, 
Se è un file remoto, ora come ora ti conviene usare XMLHttpRequest. Il
codice che hai preso da w3schools può risultarti utile nel caso in cui
devi crearti un XMLDocument "vuoto"; oppure se devi caricare da locale
un file.
Se nessuno di questi due è il tuo caso specifico, non starci neppure a
perder tempo dietro.
-- 
~  "Nei  film americani, qualsiasi problema che  venga considerato
 sufficientemente catastrofico, puo' essere risolto facendo esplodere
uno o piu' ordigni nucleari" (ZER0  & Cosimo)


Ti spiego la mia situazione:
ho un javascript client-side che deve recuperare localmente
questo XMLDocument contenente già una struttura che dovrò
andare poi ad arricchire tramite javascript.
XMLHttpRequest non fa molto al caso mio in questa situazione,
mi sembra impossibile che non si riesca a trovare il modo
di superare questa incompatibilità..
E' possibile secondo te risolverla utilizzando un qualche
framework Ajax?
grazie mille,
Blob.

 di superare questa incompatibilità..
Le incompatibilità non le si superano, ci sono e se ne deve
prendere atto. :) Detto questo, il tuo non è un problema di
compabilità ma di codice errato. Il punto come ti ho detto,
è che spesso e volentieri non c'è bisogno di codice di quel
tipo, e spesso la gente lo usa confondendosi.
Comunque, tralasciando la questione di privilegi, se IE7 ti
restituisce il seguente errore:
"il server di automazione non può creare l'oggetto".
Devi cambiare ActiveX. Ad esempio, puoi provare a creare un
oggetto di tipo "Msxml2.DOM.Document.x.0", dove la x indica
la versione. Ad esempio:
	var doc = new ActiveXObject("Msxml2.DOM.Document.6.0");
Per quanto riguarda FF invece, il nodo non è un NodeElement
semplicemente perché questo tipo mi pare che FF non lo usi,
e ti restituisca un Element.
Va visto quindi come lo crei e come lo appendi al documento
e se il documento te l'ha caricato effettivamente o meno.
Se ci sono problemi di privilegi, ti ritrovi l'errore nella
error console di FF.
-- 
~ "L'arte non riproduce cio' che e' visibile,ma rende visibile cio'
che non  sempre lo e'" (Paul Klee)


Ti ringrazio per tutti i consigli, ma su internet explorer
i problemi mi sembrano davvero insormontabili...
Per quanto riguarda FF, ho effettivamente
un problema di privilegi, come segnalato
da firebug.
Questo è quello che faccio:
	homeDom = loadXMLDoc("../speciali/home1.xml");	
	var opzioni = homeDom.getElementsByTagName("opzioni")[0];
	var ul = homeDom.createElement("ul");
	opzioni.appendChild(ul);
Firebug riporta:
"Permesso negato al metodo di chiamata Element.appendChild"
Da cosa può esser dato?
Ho provato a dare al file xml su cui opero
permessi 775 e anche 777, ma non c'è verso..
consigli?
grazie mille,
Blob
 
 

 	opzioni.appendChild(ul);
Devi essere certo che il caricamento avvenga in modo sincrono, o in
alternativa impostare l'event-handler relativo al caricamento, cosě
da essere certi che si manipoli il documento una volta caricato.
-- 
~ "The demo effect, you don't expect"