Как я могу определить, есть ли в выражении E4X совпадение или нет? - PullRequest
1 голос
/ 15 апреля 2009

Я пытаюсь получить доступ к элементу XMLList и преобразовать его в объект XML.

Я использую это выражение:

masonicXML.item.(@style_number == styleNum)

Например, если есть совпадение, все работает нормально, но если нет совпадения, я получаю сообщение об ошибке, когда пытаюсь привести его к XML, говоря, что оно должно быть правильно сформировано Поэтому мне нужно убедиться, что выражение соответствует, прежде чем я приведу его в XML. Я попытался установить его в переменную XMLList и проверить, является ли он текстовым () следующим образом:

var defaultItem:XMLList = DataModel.instance.masonicXML.item.(@style_number == styleNum);
                    if(defaultItem.text())
                    {
                        DataModel.instance.selectedItem = XML(defaultItem);
                    }

Но все равно выдает ошибку, если нет совпадения. Работает нормально, если есть совпадение.

СПАСИБО!

Ответы [ 3 ]

1 голос
/ 16 апреля 2009

По моему опыту, самый простой способ проверить результаты - это взять 0-й элемент списка и посмотреть, является ли он null.

Вот ваш пример кода с несколькими изменениями. Обратите внимание, что я изменил тип defaultItem с XMLList на XML, и я назначаю его 0-му элементу списка.

var defaultItem:XML = 
    DataModel.instance.masonicXML.item.(@style_number == styleNum)[0];
if( defaultItem != null ) 
{
    DataModel.instance.selectedItem = defaultItem;
}
0 голосов
/ 21 мая 2009

Нулевая проверка Мэтта - хорошее решение. (Если нет возможности иметь нулевые элементы в XMLList ... возможно, нет, но я не проверял это.)

Вы также можете проверить длину списка XMLList без приведения его к строке:

if (defaultItem.@style_number.length() > 0)

Разница между String и Array в том, что в XMLList length() является методом вместо свойства.

0 голосов
/ 15 апреля 2009

ОК, я получил это для работы с этим:

if(String(defaultItem.@style_number).length)
...