как избежать ошибки из-за отсутствия элемента из файла XML во Flash Action Script - PullRequest
0 голосов
/ 22 апреля 2010

У меня есть код, который написан для чтения данных XML. и xml-файл содержит необязательные значения, поэтому иногда элементы присутствуют там иногда. В этом случае, как я могу установить значение по умолчанию для этого в сценарии действия 3.0.

Когда я пытался отследить значение, которое пропускает область. Так есть ли какой-либо другой способ отследить, присутствует ли этот элемент или нет?

Edit:

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>

Ответы [ 3 ]

1 голос
/ 22 апреля 2010
_setHeight = (xmlValue.setHeight.length() >0)?xmlValue.setHeight:0;
0 голосов
/ 23 апреля 2010

При попытке получить доступ к XML-узлам, которые могут не существовать, вы должны попытаться использовать функции child(), attribute() и element() из класса XML. Любой из них возвращает XMLList, и если указанный узел не существует, XMLList просто пуст (с length, равным 0) вместо Flash Player, немедленно сжигающего Error.

Из Flex Livedocs - обход XML-структур :

Если вы попытаетесь отфильтровать атрибуты или элементы, которые могут не существовать, Flash® Player и Adobe® AIR ™ исключение. Например, последняя строка следующего кода генерирует ошибка, потому что нет идентификатора атрибут во втором элементе p:

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

Аналогично, последняя строка следующего кода генерирует ошибку потому что нет свойства б второй элемент 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'));
0 голосов
/ 22 апреля 2010
if(xmlElement != null){

// do stuff here if it has a set value

}else{
// if it is empty then give it a value like this:

xmlElement = defultvalue;
}
...