Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[REQ] Caricare un file XML ed utilizzarlo come DOM

0 views
Skip to first unread message

Blob

unread,
Jul 22, 2008, 7:59:31 AM7/22/08
to
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.

ZER0

unread,
Jul 23, 2008, 4:20:24 AM7/23/08
to
On Tue, 22 Jul 2008 13:59:31 +0200, Blob wrote:

> Qualcuno di voi saprebbe indicarmi qual'è il metodo corretto per
> 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)

Blob

unread,
Jul 24, 2008, 6:54:45 PM7/24/08
to
ZER0 ha scritto:

> On Tue, 22 Jul 2008 13:59:31 +0200, Blob wrote:
>
> 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.
>

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.

ZER0

unread,
Jul 25, 2008, 5:05:38 AM7/25/08
to
On Fri, 25 Jul 2008 00:54:45 +0200, Blob wrote:

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

> Ti spiego la mia situazione:

> ho un javascript client-side che deve recuperare localmente
> questo XMLDocument contenente già una struttura

"Localmente" significa nella macchina client, ovvero quella
dell'utente. E il codice dove si trova? Perché se lo esegui
da un webserver, anche locale, è altamente probabile che tu
vada incontro a problemi di sicurezza e privilegi (ricorda,
nelle nuove versioni dei browser manco puoi più caricare un
qualche tipo di immagine locale per fare l'anteprima).

Per intenderci, sarebbe come se "www.google.it" cercasse di
caricare un file del tipo "c:\windows\dati.xml". E' davvero
questo che stai cercando di fare?

> 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à..

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)

Blob

unread,
Jul 25, 2008, 1:14:56 PM7/25/08
to
ZER0 ha scritto:

> On Fri, 25 Jul 2008 00:54:45 +0200, Blob wrote:
>
[CUT]

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

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



ZER0

unread,
Jul 29, 2008, 12:15:04 PM7/29/08
to
On Fri, 25 Jul 2008 19:14:56 +0200, Blob wrote:

> Ti ringrazio per tutti i consigli, ma su internet explorer
> i problemi mi sembrano davvero insormontabili...

Ovvero?

> Per quanto riguarda FF, ho effettivamente
> un problema di privilegi, come segnalato
> da firebug.

> Questo č quello che faccio:


>
> homeDom = loadXMLDoc("../speciali/home1.xml");

Ok, ma questo codice lo carichi da web server, o da file locale?
Intendo dire, utilizzi il protocollo "file:///" o "http://", quando
carichi la pagina sul browser?

> var opzioni = homeDom.getElementsByTagName("opzioni")[0];
> var ul = homeDom.createElement("ul");
> 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"

0 new messages