как да избегнете грешката поради липсващ елемент от XML файл във Flash Action Script

Имам код, който е написан за четене на xml данните. и xml файлът съдържа незадължителните стойности, така че понякога елементите присъстват там, понякога не. В този случай как мога да задам стойност по подразбиране за това в скрипт за действие 3.0.

Когато се опитах да проследя стойността, тази област прескача. И така, има ли някакъв друг метод за проследяване дали този елемент присъства или не е нещо подобно??

Редактиране:

private function xmlListener(evt:Event) {
    xmlValue = new XML(evt.target.data);
    _videoURL = xmlValue.videoUrl;
    _setWidth = xmlValue.setWidth;
    _setHeight = xmlValue.setHeight;
}

Да предположим, че елементът 'setHeight' не присъства в XML, тогава каква би била стойността на _setHeight??

Редактиране 2:

<?xml version="1.0" encoding="UTF-8"?>
<settings>
    <videoUrl>videos.flv</videoUrl>
    <setWidth>500</setWidth>
</settings>

person coderex    schedule 22.04.2010    source източник
comment
Как обработвате XML? E4X?   -  person ilikeorangutans    schedule 22.04.2010
comment
Какво ще кажете за пример за XML   -  person invertedSpear    schedule 22.04.2010
comment
Благодаря, разбрах, че всъщност не ми трябва, след като попитах :-) о, добре, по-добре твърде много, отколкото твърде малко.   -  person invertedSpear    schedule 22.04.2010


Отговори (2)


Когато се опитвате да получите достъп до XML възли, които може да не съществуват, трябва да опитате да използвате функциите child(), attribute() и element() от класа XML. Всеки от тях връща XMLList и ако посоченият възел не съществува, XMLList е просто празен (с length от 0), вместо Flash Player незабавно да изведе Error.

От Flex Livedocs - Обхождане на XML структури:

Ако се опитате да филтрирате атрибути или елементи, които може да не съществуват, Flash® Player и Adobe® AIR™ ще хвърлят изключение. Например последният ред на следния код генерира грешка, тъй като във втория p елемент няма атрибут id:

var doc:XML = 
            <body>
                <p id='123'>Hello, <b>Bob</b>.</p>
                <p>Hello.</p>
            </body>;
trace(doc.p.(@id == '123'));

По подобен начин последният ред на следния код генерира грешка, защото няма свойство b на втория p елемент:

var doc:XML = 
            <body>
                <p id='123'>Hello, <b>Bob</b>.</p>
                <p>Hello.</p>
            </body>;
trace(doc.p.(b == 'Bob'));

За да избегнете тези грешки, можете да идентифицирате свойствата, които имат съответстващите атрибути или елементи, като използвате методите attribute() и elements(), както в следния код:

var doc:XML = 
            <body>
                <p id='123'>Hello, <b>Bob</b>.</p>
                <p>Hello.</p>
            </body>;
trace(doc.p.(attribute('id') == '123'));
trace(doc.p.(elements('b') == 'Bob'));

Можете също да използвате метода hasOwnProperty(), както в следния код:

var doc:XML = 
            <body>
                <p id='123'>Hello, <b>Bob</b>.</p>
                <p>Hello.</p>
            </body>;
trace(doc.p.(hasOwnProperty('@id') && @id == '123'));
trace(doc.p.(hasOwnProperty('b') && b == 'Bob'));
person Baelnorn    schedule 22.04.2010

person    schedule
comment
Не мисля, че нулевото нещо работи, мисля, че трябва да проверите за undefined. или можете да направите това, което правя аз в отговора си - person invertedSpear; 22.04.2010
comment
undefined и null не работят, можете да проверите, като напишете свои собствени кодове, не успях, ако условията, затова съм тук :( - person coderex; 22.04.2010