2009-11-08 1 views
0

В моей Flash сервер сокета возвращает некоторые XML-данные, которые мне нужны для синтаксического анализа, но кажется, что единственный способ запустить объект XML - это XML.Load (), который загружает внешний файл, но мой XML-файл уже загружен в переменнуюFlash-синтаксический анализ XML без загрузки внешнего файла (as2)

trace ("raw:" + msg); msgArea.htmlText + = "
update remote player loc"; var playerLocXMLOb = новый XML (msg); playerLocXMLOb.ignoreWhite = true;

след (игрокLocXMLOb.firstChild.firstChild.nodeValue);

Который только возвращает

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

Вы знаете, что я делаю неправильно? Или внешний файл - единственный способ?

+0

FYI к googlers (так как это лучший хит для 'parsing xml flash'): ActionScript 3 поддерживает встроенный XML; см. http://en.wikipedia.org/wiki/ECMAScript_for_XML –

ответ

0

Не уверен, что происходит неправильно, но вот то, что я использовал, чтобы исправить:

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

Нет, что вы делаете это правильно, я хотел бы попробовать

trace(playerLocXMLOb.x); 

AS имеет некоторые очень странные вещи с XML и вы можете получить доступ к узлу, рассматривая его в качестве переменной-члена. Дайте этому выстрел и посмотрите, что произойдет.

+0

Нет, он возвращает undefined, также делает .... ploc.uid и .... uid Наверняка есть способ сделать это? –

+0

Убедитесь, что вы правильно определяете переменную, вы можете добавить var playerLocXMLOb: XML = новый XML (msg); –

+0

@ Крис: Это работает только в AS3 –

0

Как насчет firstChild.nodeValue?

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

Существует на самом деле еще текст XMLNode внутри узла «х» - вы хотите получить nodeValue этого текстового узла, а не узла «х».

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 

При трассировке текста XMLnode (playerLocXMLOb.firstChild.firstChild.firstChild) вы видите только строку, но это на самом деле объект (чей метод ToString просто возвращает его содержимое String)