2009-11-08 7 views
0

Dans mon flash, le serveur socket renvoie des données XML que j'ai besoin d'analyser, mais il semble que la seule façon de démarrer l'objet XML est avec le XML.Load () qui charge un fichier externe, mais mon fichier XML est déjà chargé dans une variableFlash analyse XML sans charger un fichier externe (as2)

trace ("raw:" + msg); msgArea.htmlText + = "
mise à jour du lecteur distant"; var playerLocXMLOb = nouveau XML (msg); playerLocXMLOb.ignoreWhite = true;

trace (playerLocXMLOb.firstChild.firstChild.nodeValue);

qui retourne juste

raw: <ploc><x>348</x><y>468</y><uid>red</uid></ploc> 
null 

Savez-vous ce que je fais mal? Ou est un fichier externe le seul moyen?

+0

Pour votre information à googlers (puisque c'est le meilleur résultat pour 'parsing xml flash'): Actionscript 3 supporte le XML intégré; voir http://en.wikipedia.org/wiki/ECMAScript_for_XML –

Répondre

0

Je ne sais pas ce qui se passait mal, mais voici ce que je faisais corriger:

docXML = new XML(msg); 
    XMLDrop = docXML.childNodes; 
    XMLSubDrop = XMLDrop[0].childNodes; 
    _root.rem_x = (parseInt(XMLSubDrop[0].firstChild)); 
    _root.rem_y = (parseInt(XMLSubDrop[1].firstChild)); 
    _root.rem_name = (XMLSubDrop[2].firstChild); 
1

Non, vous le faites correctement, je voudrais essayer

trace(playerLocXMLOb.x); 

AS a des choses très étranges avec XML et vous pouvez réellement accéder à un nœud en le traitant comme une variable membre. Donnez un coup de feu et voyez ce qui se passe.

+0

Non, il renvoie undefined, de même que .... ploc.uid et .... uid Sûrement il y a un moyen de faire cela? –

+0

Assurez-vous que vous définissez la variable correctement, vous pouvez ajouter var playerLocXMLOb: XML = new XML (msg); –

+0

@Chris: Cela ne fonctionne que dans AS3 –

0

Que diriez-vous firstChild.nodeValue?

trace(playerLocXMLOb.firstChild.nodeValue);//should trace 438 
0

Il est en fait un XMLNode plus de texte à l'intérieur du noeud « x » - vous voulez obtenir le nodeValue de ce noeud de texte, plutôt que du nœud « x ».

var msg:String = "<ploc><x>348</x><y>468</y><uid>red</uid></ploc>"; 
trace("raw: "+msg); 
var playerLocXMLOb = new XML(msg); 
trace(playerLocXMLOb.firstChild);//returns the root XMLNode named ploc 
trace(playerLocXMLOb.firstChild.firstChild);//returns the child XMLNode named x 
trace(playerLocXMLOb.firstChild.firstChild.firstChild);//returns the child XMLNode, which is a text node 
trace(playerLocXMLOb.firstChild.firstChild.firstChild).nodeValue;//returns the String contents of that text node 

Lorsque vous tracez un XMLNode texte (playerLocXMLOb.firstChild.firstChild.firstChild) vous ne voyez qu'une chaîne, mais il est en fait un objet (dont la méthode toString renvoie simplement son contenu String)

Questions connexes