PDA

View Full Version : [DOM xml] visualizzare contenuto nodi xml tramite DOM


Re_Kotc
01-09-2008, 17:22
ciao a tutti, sto cercando di accedere tramite DOM al seguente file xml (lo so che è stupido ma è un file di test :D)

<?xml version="1.0" ?>
<root>

<pirla>test di prova motore ricercasssssss</pirla>
<pirla>test di prova motore ricercazzzzzzzzz</pirla>
<pirla>test di prova motore ricercaq1dxzcs</pirla>

<pirla>test di prova motore ricercafcn bnf</pirla>
<pirla>test di prova motore ricedsasada</pirla>
<pirla>test di prova motore ricefdasda</pirla>

<pirla>test di prova motore rice4324
<pirladentro>

sono il pirla che sta dentro

</pirladentro>

</pirla>
<pirla>

<pirladentro>

ennesimo pirla

</pirladentro>

test di prova motore ricerrred</pirla>
<pirla>test di prova motore ricdasd</pirla>

</root>

la parte di codice di cui non capisco il funzionamento è questa:





var root_node = xmldoc.getElementsByTagName('pirladentro'); //restituisce una nodelist

var lunghezza = root_node.length;

alert(lunghezza);
alert(root_node.firstChild.data);


in teoria dovrei ottenere in root_node una nodelist con dentro i due nodi 'pirladentro' del documento..o no? perchè se poi provo a stampare la variabile lunghezza funziona e mi stampa correttamente 2, ma se cerco di accedere al firstChild di root_node non accade nulla? non dovrebbe stamparmi il contenuto del primo nodo 'pirladentro' cioè "sono il pirla che sta dentro" ?

grazie a chi volesse illuminarmi..

kk3z
01-09-2008, 17:54
restituisce appunto una lista di nodi, non un nodo xml che ha dei child e dei sibling (anche perchè non rispetta più la struttura dell'xml), iteraci sopra con un loop:
var listanodi = xmldoc.getElementsByTagName('pirladentro');
var lunghezza = listanodi.length;
for (var i = 0; i < lunghezza; i++)
{
var pirladentro_nodo = listanodi[i];
//
}

Re_Kotc
01-09-2008, 20:06
intanto grazie perchè è la seconda volta che mi aiuti :D....però ancora non riesco a fargli fare ciò che vorrei...io volevo ad ogni iterazione fargli stampare il contenuto di pirladentro_nodo...e ho modificato in 3 diversi modi 1,2,3:

for (var i = 0; i < lunghezza; i++)
{
var pirladentro_nodo = listanodi[i];

1 alert(pirladentro_nodo);
2 alert(pirladentro_nodo.firstChild.data);
3 alert(pirladentro_nodo.data);



}

ma nessuno dei 3 fa quello che speravo..non dovrebbe (almeno uno dei 3 :D) leggere il contenuto e stamparlo a video?

kk3z
02-09-2008, 10:12
prova con nodeValue (http://developer.mozilla.org/en/DOM/element.nodeValue):
alert(pirladentro_nodo.nodeValue);
o meglio
alert(pirladentro_nodo.firstChild.nodeValue);

Re_Kotc
02-09-2008, 11:49
mmmmm :cry: :cry: :cry: ...non funziona in nessuno dei 2 modi...non capisco..!!

Re_Kotc
02-09-2008, 13:04
RISOLTO!...girando un pò di documentazione..ho scritto questo:

var nodelist = xmldoc.getElementsByTagName('pirladentro');




var lunghezza = nodelist.length;







for (var i = 0; i < lunghezza; i++){


document.write(nodelist[i].childNodes[0].nodeValue);
document.write("<br>");


}


cioè itero nodelist e stampo per ogni nodo il nodeValue, solo che per accederci devo accedere prima al campo childNodes[0] di ogni nodo..e non ho ben capito perchè..

kk3z
02-09-2008, 20:28
firstChild e childNodes[0] è la stessa cosa... non è che stai usando listanodi e non nodelist?

Re_Kotc
03-09-2008, 20:55
mmm..no ho controllato bene...beh ora funzia :D....grazie per la pazienza dimostrata!