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