PDA

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


DJ_ManiaC
09.07.2007, 09:58
Проблема в следующем. Пытаюсь сделать в цикле объявление переменной с именем ноды и его значением, имя ноды trace выводит, а значение получается null.
код xml следующий:
<?xml version="1.0"?>
<line>
<k_1>Значение_1</k_1>
<k_2>3</k_2>
<k_3>4</k_3>
<k_4>5</k_4>
<k_5>1,2</k_5>
</line>
Код AS:
line = new XML(); // новый XML объект
line.ignoreWhite = true; // включение пропусков пустот в XML
line.load("line.xml"); // загрузка данных из источника
// Функция проверки загружен ли XML
line.onLoad = function(success) {
if (success) {
rootNode = line.firstChild;
pathFactor = rootNode.firstChild;
while (pathFactor!=null) {
factorName = pathFactor.nodeName;
factorValue = pathFactor.nodeValue;
trace (factorName);
trace (factorValue);
var targetClip:MovieClip = attachMovie("Str_Main1","Top_" + NextLayer, NextLayer, {_x: 0, _y:NextStringY});
targetClip[factorName] = factorValue;
pathFactor = pathFactor.nextSibling;
}
}
}
Помогите разобраться где мой косяк?

etc
09.07.2007, 10:30
factorValue = pathFactor.firstChild.nodeValue;

Вообще говоря, CDATA надо использовать.

DJ_ManiaC
09.07.2007, 11:33
Спасибо. Не знал что при таком раскладе в XML нужно на уровень ниже опуститься.
CDATA? А это как?

etc
09.07.2007, 13:43
Это вот так (http://flasher.ru/forum/search.php?q=CDATA&do=process).

Ведьмак
09.07.2007, 14:36
у меня тоже вначале были проблемы, пока не понял, что значение нода это тоже нод... :)

DJ_ManiaC
09.07.2007, 17:23
__etc Спасибо... Буду разбираться...

DJ_ManiaC
11.07.2007, 16:29
По ходу дела возникла ещё одна проблемка. Я уже не стал создавать новую тему для этого, всё равно тема топика обобщённая.
Пытаюсь создать переменную формата Date, а информацию в неё загнать из XML
Строка XML:
<DateTime>2007, 1, 5, 23, 30</DateTime>
Строка AS:
DateTime = new Date (matchFactor.firstChild.nodeValue);
Трасс выводит Invalid Date
Путь до ноды 100% правильный, т.к. она трасится нормально, но в Date загонятся не хочет. Подскажите что не так?

etc
11.07.2007, 16:33
В конструктор Date надо передавать 5 параметров типа Number, а не один единственный типа String.

DJ_ManiaC
11.07.2007, 16:41
Понял спасибо. В ноде лучше указать числовое значение в милисекундах или делать несколько нод для года, месяца и т.д.? При помощи PHP потом реально будет посчитать цифру для милисекунд?

iNils
11.07.2007, 16:45
Как удобнее. Можно и так и так.

DJ_ManiaC
11.07.2007, 16:49
Ещё раз спасибо... Вроде пока всё :) Буду дальше глобалить...

Aziz Zaynutdinoff
11.07.2007, 17:00
значение ноды считывается в String. разбить по символу ", " и перегнать данные в Number, затем передать конструктору new Date

iNils
11.07.2007, 17:02
значение ноды считывается в String. разбить по символу ", " и перегнать данные в Number, затем передать конструктору new DateЭто уже интересно :) Как? Кроме как без хака или перечисления с помощью case конструкторов согласно числу аргументов.

etc
11.07.2007, 17:20
Хак с __proto__ не сработал, сразу говорю.

iNils
11.07.2007, 17:42
Учитывая, что класс нам известен, проще в массив последовательно забить "имена нужных методов" и вызывать их через []
Ну или
var date:Date = null;
switch (length) {
case 1:
date = new Date (a[0])
break;
case 2:
date = new Date (a[0],a[1])
break
...