как избежать ошибки из-за отсутствия элемента из 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;
}

Предположим, что элемент set '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? Е4Х?   -  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'));

Точно так же последняя строка следующего кода генерирует ошибку, потому что у второго элемента p нет свойства b:

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
Я не думаю, что нулевая вещь работает, я думаю, вам нужно проверить неопределенность. или вы можете сделать то, что я делаю в моем ответе - person invertedSpear; 22.04.2010
comment
undefined и null не работают, вы можете проверить, написав свои собственные коды, я не смог, если условия, поэтому я здесь :( - person coderex; 22.04.2010