View Full Version : [AS & XML] Problema lettura Xml con Flash
Ciao a tutti, premetto subito che ho già letto numerose guide, tutorial ed esempi vari in merito a questo argomento, dopo una settimana sono ancora al punto di partenza...o quasi.
Vado subito al punto: Ho un file Xml di questo tipo:
<xml>
<categorie>
<cat id="0001">
<nome>nome_categoria</nome>
<descr>descrizione_categoria</descr>
//
</cat>
<cat id="0002">
<nome>nome_categoria2</nome>
<descr>descrizione_categoria2</descr>
//
</cat>
//
</categorie>
</xml>
Supponiamo che io debba leggere tutti i campi "nome" con un ciclo for.
Indubbiamente ho bisogno di sapere quante "cat" ci sono nell xml quindi ho fatto:
var dato = new Array();
var my_xml = new XML();
var nodes = new Array();
my_xml.onLoad = function(success){
if (success){
nodes = my_xml.firstChild.childNodes;
for(i = 0; i < nodes.length; i++){
var dato[i] = nodes[i].attributes.nome;
}
}
}
naturalmente non va...chi è che saprebbe come dare una raddrizzata al mio codice?? o comunque che sappia mettermi sulla una strada buona???
Grazie della disponibilità
<xml>
<categorie>
<cat id="0001">
<nome>nome_categoria</nome>
...
non è xml valido, prova con:
<?xml version="1.0" encoding="ISO-8859-1"?>
<categorie>
var my_xml = new XML();
Ti sei dimenticato di usare my_xml.load("nome del file.xml)?
nodes = my_xml.firstChild.childNodes;
for(i = 0; i < nodes.length; i++){
var dato[i] = nodes[i].attributes.nome;
}
my_xml.firstChild si riferisce al nodo "categorie", e i suoi childnodes sono i nodi "cat". Ma nessuno dei nodi cat ha un attributo "nome", ma solo "id". Se vuoi trovare il valore del sottonodo "nome", fai
dato.push( nodes[i].firstChild.value );
allora l'xml è valido solo che nn ho scritto tutto l'ambaradan anche qui sul forum, my_xml.load(nome_file.xml) è messo fuori dalla funzione onload quindi anche quello c'è.
Le altre due cose che mi hai suggerito credo che mi risolvano il problema quindi intanto grazie, poi appena faccio le prove ti faccio sapere come è andata
Aggiornamento:
Ho modificato il codice in questa maniera:
stop();
var my_xml = new XML();
var nodes = new Array();
my_xml.onLoad = function(success){
if (success){
nodes = my_xml.firstChild.childNodes;
for(i = 0; i < nodes.length; i++){
txt_lo.text += nodes[i].firstChild.value
}
}
}
my_xml.load("categorie.xml");
Il risultato è che non entra nemmeno nel ciclo for...non ne riesco a venire a capo
Si vede che success è false... prova qualche trace qua e là, per esempio trace(success) o trace(nodes) o trace(nodes[i])
allora ho fatto come dici e come pensavo non entra nel ciclo for perchè con le impostazioni nodes = my_xml.firstchild.childNodes, nodes.length risulta uguale a 0. Success = true
Aggiornamento:
Sto facendo qualche prova (a caso devo dire) ,posto i risultati sperando che possano illuminare qualcuno :D
PROVA 1:
stop();
var my_xml = new XML();
var nodes = new Array();
my_xml.onLoad = function(success){
if (success){
nodes = my_xml.nextSibling.childNodes;
trace(success);
trace(nodes.length)
trace(nodes)
}
}
my_xml.load("categorie.xml");
Risultati:
success = true
nodes.length = undefined
nodes = undefined
PROVA 2:
stop();
var my_xml = new XML();
var nodes = new Array();
my_xml.onLoad = function(success){
if (success){
nodes = my_xml.childNodes;
trace(success);
trace(nodes.length);
trace(nodes)
}
}
my_xml.load("categorie.xml");
Risultati:
success = true
nodes.length = 2
nodes =
,<categorie> (cos'è sta virgola davanti categorie????)
<cat name="primi piatti">
<name>primi piatti</name>
<descr>boniii</descr>
<delay>49</delay>
</cat>
<cat name="secondi">
<name>secondi</name>
<descr>asdf</descr>
<delay>23</delay>
</cat>
</categorie>
PROVA 3:
stop();
var my_xml = new XML();
var nodes = new Array();
my_xml.onLoad = function(success){
if (success){
nodes = my_xml.firstChild.childNodes;
trace(success);
trace(nodes.length);
trace(nodes)
}
}
my_xml.load("categorie.xml");
Risultati:
success = true
nodes.length = 0
nodes = (niente)
Ancora qualche prova
PROVA 4:
stop();
var my_xml = new XML();
var nodes = new Array();
my_xml.onLoad = function(success){
if (success){
nodes = my_xml.firstChild.nextSibling.childNodes;
trace(success);
trace(nodes.length);
trace(nodes)
}
}
my_xml.load("categorie.xml");
Risultati:
success = true
nodes.length = 5
nodes =
,<cat name="primi piatti">
<name>primi piatti</name>
<descr>boniii</descr>
<delay>49</delay>
</cat>,
,<cat name="secondi">
<name>secondi</name>
<descr>asdf</descr>
<delay>23</delay>
</cat>,
eseguendo la stessa prova con il comando my_xml.ignorewhite= "true" si ottengono i seguenti risultati
success = true
nodes.lenght = undefined
nodes = undefined
AGGIORNAMENTO:
Ho trovato la chiave di volta!
PROVA 5:
stop();
var my_xml = new XML();
my_xml.ignoreWhite = true; *
var nodes = new Array();
my_xml.onLoad = function(success){
if (success){
nodes = my_xml.firstChild.childNodes;*
trace(success);
trace(nodes.length);
trace(nodes[0].attributes.name)
}
}
my_xml.load("categorie.xml");
Risultati:
success = true
nodes.length = 2
nodes[0].attributes.name = primi piatti
l'unica cosa che non riesco ancora a leggere sono l tag all' interno di cat (descr, delay ecc)
L'ultimo scoglio da superare :
PROVA 6:
stop();
var my_xml = new XML();
my_xml.ignoreWhite = true;
var nodes = new Array();
my_xml.onLoad = function(success){
if (success){
nodes = my_xml.firstChild.childNodes;
trace(success);
trace(nodes.length);
var dato;
dato = (nodes[0].childNodes[1].value)
trace(dato)
}
}
my_xml.load("categorie.xml");
Risultati:
success = true
nodes.lenght = 2
dato = undefined (mentre se tolgo il ".value" mi da <descr> descrizione </descr>... quindi come si estraggono i dati dai tag??? grazie mille
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.