Newsgroup: it.comp.lang.javascript
Titolo: JS + XMLDOM = Mi date una mano?

ho un file xml con questo:
<testo>
stringa lunga quanto voglio
</testo>
in una pagina html metto:
<html><head><title></title>
<script type="text/javascript">
var xml = null;
if (document.implementation && document.implementation.createDocument) 
{
  xml = document.implementation.createDocument("","",null);
  xml.onload=Leggi ;
  xml.load("file.xml"); }
else if (window.ActiveXObject) {
  xml = new ActiveXObject("Microsoft.XMLDOM");
  xml.onreadystatechange = IEGo;
  xml.load("file.xml"); }
function IEGo() { if (xml.readyState == 4) Leggi(); }
function Leggi() {
  testo = xml.getElementsByTagName("testo")[0].childNodes[0].nodeValue 
;
  alert(testo); }
</script>
</head><body></body></html>
su internet explorer mi appare l'altert con il contenuto all'interno 
di <testo></testo>
su firefox non appare e mi dice
Error: xml.getElementsByTagName("testo")[0] has no properties
come posso risolvere la cosa? ne ho bisogno anche in firefox!
per favore... datemi una mano!
visuddhi 

visuddhi wrote:
[...]
Scusami, taglio tutto e ti rispondo in frettissima.
Vado a naso, data la fretta non ho letto il codice, ma mi sembra un 
errore classico, ovvero se abbiamo:
<div>
	<p>un bel paragrafo</p>
</div>
Per explorer, il noto digeritore di sassi, abbiamo che p e' il primo 
figlio del nodo div. In realta' il primo figlio del div e' un nodo di 
testo (l'andata a capo).
Ci ho azzeccato?
Riscusami comunque per la fretta.

 Ci ho azzeccato?
a dire il vero non so se ci hai azzeccato ma credo di no!
ho provato a richiamare childNodes[1] e non va quindi non prende nodi 
successivi. se ho capito bene!
spero tu possa perdere un minuto domani e darmi una dritta :)
grazie comunque, visuddhi 

 grazie comunque, visuddhi 
Non ci ho azzeccato ma provo lo stesso giocare a fare l'indovino.
Saro' quindi prolisso.
Presupposto che il tuo codice copiato e incollato su firefox (ora ho 
avuto tempo) funziona benissimo e presupposto che il tuo messaggio di 
errore e' piuttosto esplicativo...
 > Error: xml.getElementsByTagName("testo")[0] has no properties
(quindi facendo xml.getElementsByTagName("testo")[0]===undefined 
otterresti un bel true)
...deduco che il file xml sia ben diverso da come l'hai postato e, con 
tutti questi presupposti ti potrei dire che in Firefox ottieni 
quell'errore in un documento xml non ben formato, dove viene a mancare 
l'elemento radice.
Per intenderci se il tuo file fosse una cosa del tipo:
<?xml version="1.0"?>
<testo>ciao</testo>
<testo>miao</testo>
<testo>bau</testo>
con firefox ti darebbe questo errore.
Se fosse stato:
<?xml version="1.0"?>
<myDocument>
<testo>ciao</testo>
<testo>miao</testo>
<testo>bau</testo>
</myDocument>
Sarebbe andato tutto bene.
Il punto e' che a me IE con lo stesso errore mi segnala almeno un 
"necessario oggetto", tu dici che con IE funziona.
A dirla tutta ora non ho modo di creare una cartella virtuale e non so 
se possa dipendere da quello, ma eseguendo il tuo file cosi' in locale 
IE mi sputa lo stesso un "necessario oggetto" perche' non riesce a 
caricarsi il file xml, cosi' ho fatto la prova caricandogli il contenuto 
xml come stringa con il metodo loadXML.
Resta il fatto che caricando un documento xml ben formato sia IE che 
Firefox rispondono perfettamente al codice che hai scritto.
P.S. "strana" anche la stringa che usi per creare l'oggetto ActiveX, 
piu' che strana a memoria mi sembra vecchia, quella delle prime API 
Microsoft su xml? In effetti sembra pero' avere gli stessi membri di 
quello che creerei io con "MSXML2.DOMDocument".
Magari ormai sono alias, comunque ai fini del nostro test: io ho fatto 
la prova con tutte e due le stringhe e i risultati non cambiano.

 quello che creerei io con "MSXML2.DOMDocument".
Si, non capendoci molto ho 'scopiazzato' dei codici che ho trovato in
rete ma alla fine sull'xml mi sono arenato! :)
visuddhi

 contenuto genere l'errore indicato.
Hai impostato il content type e l'encoding da ASP?
-- 
ZER0
~ The Tangent Universe collapsed 5938 days, 2 hours, 48 minutes and 46 seconds ago.

 Hai impostato il content type e l'encoding da ASP?
no, non pensavo fosse necessario. ho lasciato che il server 'sputasse'
fuori la pagina così come gli pareva :)
ma non esiste una proprietà che mi prenda tutto il contenuto e poi, se
voglio navigare nei nodi navigo e se non mi interessa ho tutta la
pagina recuperabile in una variabile?
visuddhi

 pagina recuperabile in una variabile?
Il punto e' che tu con firefox ti stai fermando prima. 
Quando carichi un file xml, questo viene comunque parserizzato e viene
generato l'albero dei nodi.
Quindi se questo non e' wellformed, non hai un "contenuto", ne' da navigare
ne' da visualizzare.
Se non imposti il content type e l'encoding da ASP, probabilmente firefox
ti sta leggendo schifezze; e questo genera un errore di parsing.
Quando cio' accade, il contenuto xml del tuo documento e' l'errore che e'
stato generato. In tal caso il nodo documentElement e' un tag chiamato
"<parsererror>".
Puoi verificare il contenuto del tuo oggetto in questo modo:
alert( (new XMLSerializer()).serializeToString(xmldoc) );
dove "xmldoc" e' il tuo documento xml.
In IE per recuperare il contenuto xml di un documento, puoi utilizzare la
proprieta' xml:
alert(xmldoc.xml);
Puoi unificare le due sintassi in questo modo:
if (window.XMLDocument && 
	XMLDocument.prototype.__defineGetter__  && 
	typeof XMLDocument.prototype.xml=="undefined"){
	XMLDocument.prototype.__defineGetter__("xml", function () {
		return (new XMLSerializer()).serializeToString(this);
	});
}
Se imposti questo all'inizio del tuo script, puoi riferirti successivamente
con:
alert(xmldoc.xml)
su entrambi i browser.
E cosi' rispondo anche all'altra tua domanda.
-- 
ZER0
~ The Tangent Universe collapsed 5938 days, 3 hours, 19 minutes and 7 seconds ago.
on air ~ "Gianluca Grignani - Che ne sarà di noi"

"ZER0"  ha scritto
[cut]
Grazie ZERO, grazie Andrea! :)
visuddhi

 Grazie ZERO, grazie Andrea! :)
Prego. Hai risolto, suppongo. :)
-- 
ZER0
~ The Tangent Universe collapsed 5938 days, 5 hours, 11 minutes and 40 seconds ago.
