В Actionscript, как лучше всего проверить, существует ли свойство узла xml? - PullRequest
4 голосов
/ 25 февраля 2009

Если у меня есть xml вроде этого:

<books>
    <book title="this is great" hasCover="true" />
    <book title="this is not so great" />
</books>

Каков наилучший (или принятый) способ в ActionScript проверить, существует ли атрибут hasCover, прежде чем писать какой-то код против него?

Ответы [ 3 ]

13 голосов
/ 25 февраля 2009

Просто добавим немного точности.

Если вы хотите проверить, существует ли свойство, даже если оно пустое, вам обязательно следует использовать hasOwnProperty:

var propertyExists:Boolean = node.hasOwnProperty('@hasCover');

Проверка длины содержимого несколько грязная и вернет false, если значение атрибута пустое. Вы даже можете получить ошибку во время выполнения, если попытаетесь получить доступ к свойству (длине) нулевого объекта (hasCover) в случае, если атрибут не существует.

Если вы хотите проверить, существует ли свойство и установлено ли значение, попробуйте оба варианта , начиная с hasOwnProperty , чтобы проверка значения (возможная ошибка времени выполнения) игнорировалась в случае, если атрибут не не существует:

var propertyExistsAndContainsValue:Boolean = (node.hasOwnProperty('@hasCover') && node.@hasCover.length());
6 голосов
/ 09 марта 2009

Хорошо - я наткнулся на это сегодня, и а) оно использовалось Эли Гринфилдом и б) это мучительно просто, поэтому я должен пометить его как ответ, если только кто-то не найдет причину не ...

if("@property" in node){//do something}
5 голосов
/ 25 февраля 2009

См. вопрос № 149206: «Лучший способ определить, существует ли атрибут XML во Flex» .

Я предложил сделать event.result.hasOwnProperty("@attrName"), но ответ с наибольшим количеством голосов (на момент написания этой статьи) от Тео:

event.result.attribute("attrName").length() > 0
...