PDA

Просмотр полной версии : И снова XML(


Meksika
18.11.2007, 20:17
Здравствуйте... Не могли бы Вы подсказать, в чем заключается проблема?
Есть ХМЛ:
<circle1>
<color>1</color>
<desc>This is the first description</desc>
</circle1>
<circle2>
<color>2</color>
<desc>asd</desc>
</circle2>
<circle3>
<color>3</color>
<desc>zxc</desc>
</circle3>

А также АС:
conf_xml = new XML();
conf_xml.load("conf.xml");
myXML.parseXML(conf_xml);
conf_xml.ignoreWhite = true;
n = 3;
var col = new Array(n);
var desc = new Array(n);

conf_xml.onLoad = function(st)
{
if(st)
{
for(i in conf_xml.childNodes)
{
cir = conf_xml.childNodes[i];
col[i] = cir.childNodes[0].childNodes[0];
desc[i] = cir.childNodes[1].childNodes[0];
trace(i+": "+col[i]+","+desc[i]);
desc_out.text = desc[0];



}
}
else trace("Error while opening XML");
};



Как вытащить переменную desc[0], для работы вне цикла?

Очень надеюсь на вашу помощь. Заранее спасибо....:umnik2:

Aziz Zaynutdinoff
19.11.2007, 03:04
во-первых поискать на форуме
во-вторых, сначала описать событие onLoad, затем загружать xml (у вас сейчас наоборот)
в-третьих, чтобы использовать переменные, значения которых задаются в событие, то понятное дело, что надо дождаться, когда это событие: а) наступит; б) отработает
в-четвертых, зачем использовать for ... in, если в вашем случае следует использовать обычный цикл for для переменной от 0 до conf_xml.childNodes.length

Вывод: в конце парсировки xml-файла, запустите функцию, которая б выводила значение desc[0]

Meksika
19.11.2007, 17:14
Aziz Zaynutdinoff
Спасибо огромное! Вышло все, только теперь не могу понять где ошибка дальше:(

function constOuts() {
desc_out.text = col[0];
if (col[0] == 1){
c1.gotoAndStop(2);
}
}


В текстовое поле - все выводиться правильно, без всяких проблем, а вот проверка равняется ли значение 1, почему-то неверная... По ХМЛ - она всегда равна 1 и в текстовом поле она же и выводиться, почему тогда при проверке не работает?

Double
19.11.2007, 20:11
несовпадение типов. попробуйте сделать trace(typeof(col[0]));

Aziz Zaynutdinoff
20.11.2007, 09:35
при «вытаскивании» данных из xml все они типа String. Я обычно делаю так

var data = (isNaN(<ЗДЕСЬ ТЕКУЩИЙ НОД>)) ? <ЗДЕСЬ ТЕКУЩИЙ НОД> : Number(<ЗДЕСЬ ТЕКУЩИЙ НОД>);

т.е. просто проверяем число это или строка.

silin
20.11.2007, 10:07
такой еще нюанс:
var xml:XML=new XML("<circle1><color>1</color></circle1>");
var node:XMLNode=xml.firstChild.firstChild.firstChild;
trace( node );//1
trace(node==1);//false
trace(node=="1");//false
trace(node.toString()==1);//true
trace(node.nodeValue==1);//true
т.е. не число и не строка, а текстовый нод и правильно смотреть его nodeValue, хотя и toString() справляется (почему трейс и выводит 1)

а строку с числом флеш легко сравнит (за счет приведения типов
trace(1=="1");//true
trace(1==="1");//false

telit
20.11.2007, 10:52
function constOuts() {
desc_out.text = col[0];
if (col[0] == '1'){
c1.gotoAndStop(2);
}
}