Просмотр полной версии : Не заполняется массив данными из XML
В чём причина?
//Заполнение массива данными из XML файла
_global.xml_array = new Array();
var my_xml:XML = new XML();
my_xml.ignoreWhite = true;
my_xml.load("http://10.182.3.13/current_measure_xml/doXML.php");
my_xml.onLoad = function() {
k = 1;
for (j=0; j<100; j++) {
_global.xml_array[k] = {val:my_xml.childNodes[0].childNodes[j].childNodes[0].childNodes[0].nodeValue};
_global.xml_array[k] = {typ:my_xml.childNodes[0].childNodes[j].childNodes[1].childNodes[0].nodeValue};
_global.xml_array[k] = {time_stamp:my_xml.childNodes[0].childNodes[j].childNodes[2].childNodes[0].nodeValue};
_global.xml_array[k] = {ent_name:my_xml.childNodes[0].childNodes[j].childNodes[3].childNodes[0].nodeValue};
_global.xml_array[k] = {tag_name:my_xml.childNodes[0].childNodes[j].childNodes[4].childNodes[0].nodeValue};
k++;
}
trace(_global.xml_array[1].val);
trace(_global.xml_array[1].typ);
trace(_global.xml_array[1].time_stamp);
trace(_global.xml_array[1].ent_name);
trace(_global.xml_array[1].tag_name);
};
XML:
<?xml version="1.0" encoding="UTF-8" ?>
- <MEASURES>
- <MEASURE id="1">
<VALUE />
<TYPE>ТИ</TYPE>
<TIME_STAMP />
<ENT_NAME>ПС 110 Ошмяны</ENT_NAME>
<TAG_NAME>I 35 Карьер-Засковичи</TAG_NAME>
</MEASURE>
- <MEASURE id="2">
<VALUE />
<TYPE>ТИ</TYPE>
<TIME_STAMP />
<ENT_NAME>ПС 110 Ошмяны</ENT_NAME>
<TAG_NAME>I 35 Карьер-Клиденяты</TAG_NAME>
</MEASURE>
- <MEASURE id="3">
<VALUE />
<TYPE>ТИ</TYPE>
<TIME_STAMP />
<ENT_NAME>ПС 110 Ошмяны</ENT_NAME>
<TAG_NAME>Q 110 Кальвеляй</TAG_NAME>
</MEASURE>
...................................
Огромная просьба пользоваться тегом [CODE] для отображения кода в ваших сообщениях !!!
По теме: а пробовал трейсить он (xml) вообще то грузится ?!
Грузится, и выводит только последнее:
trace(_global.xml_array[1].tag_name);
Вот так вот:
undefined
undefined
undefined
undefined
I 35 Карьер-Засковичи
Попробуй добавлять вот так _global.xml_array[k].push({val:my_xml.childNodes[0].childNodes[j].childNodes[0].childNodes[0].nodeValue});
http://10.182.3.13/current_measure_xml/doXML.php
Ты грузишь php файл... может что с расширением файла напутал.
неа... всё с хмл нормал. Мот где с чилднодами намудрил. Низнаю. Я в растерянности)))
У тебя этот файл всё ещё лежит тут http://10.182.3.13/current_measure_xml/doXML.php ?!
А вообще вставь этот код и помотри если он трейсит значит xml грузится, но что то мне подсказывает что он не грузится вообще
_global.xml_array = new Array();
var my_xml:XML = new XML();
my_xml.ignoreWhite = true;
my_xml.onLoad = function(ok) {
if (ok) {
trace(this);
}
};
my_xml.load("http://10.182.3.13/current_measure_xml/doXML.php");
То что напутал скорее всего, вообще непонятно сразу для чего тебе эти k и j. Чем твой массив должен забиться и как?
2 KUZEN: Всё мне выводит. Весь хмл вывело.
2 Sneg: Массив должен забиться данными из ХМЛ. У меня в ХМЛ например 100 айдишников <measure id=1>...</measure> ... <measure id=100>...</measure> Между тэгами есть информация, которая и должна попасть в массив. Это <VALUE>, <TYPE>, <TIME_STAMP>, <ENT_NAME>, <TAG_NAME>
Из кода видно что в массив на каждой k-той позиции должно заполняться 5 записей:
_global.xml_array[k].val
_global.xml_array[k].typ
_global.xml_array[k].time_stamp
_global.xml_array[k].ent_name
_global.xml_array[k].tag_name
Но заполняеться только последняя _global.xml_array[k].tag_name
В чём причина? Помогите плиз.
Я тут попробовал по другому:
_global.xml_array = new Array();
var my_xml:XML = new XML();
my_xml.ignoreWhite = true;
my_xml.onLoad = function(ok) {
if (ok) {
_global.xml_array[1] = {val:my_xml.childNodes[0].childNodes[1].childNodes[0].childNodes[0].nodeValue};
_global.xml_array[2] = {val:my_xml.childNodes[0].childNodes[1].childNodes[1].childNodes[0].nodeValue};
_global.xml_array[3] = {val:my_xml.childNodes[0].childNodes[1].childNodes[2].childNodes[0].nodeValue};
_global.xml_array[4] = {val:my_xml.childNodes[0].childNodes[1].childNodes[3].childNodes[0].nodeValue};
_global.xml_array[5] = {val:my_xml.childNodes[0].childNodes[1].childNodes[4].childNodes[0].nodeValue};
trace(_global.xml_array[1].val);
trace(_global.xml_array[2].val);
trace(_global.xml_array[3].val);
trace(_global.xml_array[4].val);
trace(_global.xml_array[5].val);
}
};
my_xml.load("http://10.182.3.13/current_measure_xml/doXML.php");
Этот код работает. Может я не правильно с массивом работаю? Может надо где-то тип задовать заранее?
import mx.utils.Delegate;
var path_xml:String="http://10.182.3.13/current_measure_xml/doXML.php";
var xml_array:Array = new Array();
var my_xml:XML = new XML();
my_xml.ignoreWhite = true;
my_xml.onLoad = Delegate.create(this,onXMLLoad);
my_xml.load(path_xml);
function onXMLLoad(success:Boolean):Void {
if (success) {
for(var i:Number=0;i<my_xml.firstChild.childNodes.length;i++){
var node:XMLNode=my_xml.firstChild.childNodes[i];
if(node.nodeName=="MEASURE"){
parseMeasureNode(node);
};
};
};
};
function parseMeasureNode(measureNode:XMLNode):Void{
var id:Number=Number(measureNode.attributes.id);
for(var i:Number=0;i<measureNode.childNodes.length;i++){
var node:XMLNode=measureNode.childNodes[i];
var paramName:String=(node.nodeName).toLowerCase();;
xml_array[id].paramName=node.nodeValue;
};
};
Если ты уверен что с твоим XML все хорошо, то вот код который распарсит и все забьет как нужно. Только ноды должны быть текстовыми (для использования node.nodeValue)
Ух как всё заворочено. Попробую разобраться.
А как к массиву обращаться теперь?
Сначала протрейси - все ли правильно забивается:
............
var paramName:String=(node.nodeName).toLowerCase();;
xml_array[id].paramName=node.nodeValue;
trace(id+" - " + paramName +" - "+node.nodeValue);
..............
Если все Ок (а если правильный XML то будет Ок). Обращаешься к нему, например xml_array[2].tag_name или xml_array[1].type
не работает =(
Слишком как-то всё наворочено.
Почему же не работает? Вот исходник, только ноды там типа ELEMENT_NODE, поэтому null. Пока нет времени разбраться почему, но код рабочий - скорее всего у тебя проблема с кривым xml.
p.s. Ничего навороченого нет, что не понятно моэно объяснить
Я только начал работать с ХМЛ и не могу въехать в эти ноды. для меня это темный лес.
Этот код:
var paramName:String=(node.nodeName).toLowerCase();;
xml_array[id].paramName=node.nodeValue;
trace(id+" - " + paramName +" - "+node.nodeValue);
так и вставлять? Снизу? Или его в цикл надо вставлять? У меня выводит:
undefined - undefined - undefined
Samodelkin
18.04.2006, 15:27
Я бы все эти value, type и др в атрибуты запихал
XML нормальный!!! С ним работают без проблем. Проблема в том, что мне надо заполнить данными масив, а не заново разрабатывать xml.
2 Sneg: Я понял.
Сделал вот так:
var path_xml:String="http://10.182.3.13/current_measure_xml/doXML.php";
var xml_array:Array = new Array();
var my_xml:XML = new XML();
my_xml.ignoreWhite = true;
my_xml.onLoad = Delegate.create(this,onXMLLoad);
my_xml.load(path_xml);
function onXMLLoad(success:Boolean):Void {
if (success) {
for(var i:Number=0;i<my_xml.firstChild.childNodes.length;i++){
var node:XMLNode=my_xml.firstChild.childNodes[i];
if(node.nodeName=="MEASURE"){
parseMeasureNode(node);
};
};
};
};
function parseMeasureNode(measureNode:XMLNode):Void{
var id:Number=Number(measureNode.attributes.id);
for(var i:Number=0;i<measureNode.childNodes.length;i++){
var node:XMLNode=measureNode.childNodes[i];
var paramName:String=(node.nodeName).toLowerCase();
xml_array[id].paramName=node.nodeValue;
trace(id+" - " + paramName +" - "+node.nodeValue);
};
};
Но боюсь до parseMeasureNode(measureNode:XMLNode) компилятор не доходит. То ли при проверке success, то ли node.nodeName=="MEASURE". Скорей второе. Я просто в ноды эти не врубаюсь, а инфы ни где нету. Объясни плиз.
Samodelkin
18.04.2006, 16:24
Из первого варианта
_global.xml_array[k] = new Array;
_global.xml_array[k].val = my_xml.childNodes[0].childNodes[j].childNodes[0].childNodes[0].nodeValue;
_global.xml_array[k].typ = my_xml.childNodes[0].childNodes[j].childNodes[1].childNodes[0].nodeValue;
_global.xml_array[k].time_stamp = my_xml.childNodes[0].childNodes[j].childNodes[2].childNodes[0].nodeValue;
_global.xml_array[k].ent_name = my_xml.childNodes[0].childNodes[j].childNodes[3].childNodes[0].nodeValue;
_global.xml_array[k].tag_name = my_xml.childNodes[0].childNodes[j].childNodes[4].childNodes[0].nodeValue;
Никто не разрабатывает XML заново, если XML такой структуры которой ты указал вначале и валидный, то все забивается нормально - так как в примере. Расставь везде trace и посмотри на каком этапе что не выполняется.
p.s. Что тебе именно объяснить? Коментарии к коду написать?
Спасибо!!! Всё заработало. Sneg если не трудно объясни по нодам мне плиз. Или может мануал на русском гд есть? Именно по хмл и флэш.
Помнится давно Вильям Бредбери (могу ошибаться в написании имени), сделал очень просто урок для начинающих. А так - если англ. на базовом уровне F1 и читаем про классы XML и XMLNode там куча примеров и в целом понятно, вот некоторые коментарии кода.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.