AS3: XPath возвращает XMLNode вместо XMLList, если одинарное совпадение? - PullRequest
0 голосов
/ 16 мая 2011

AS3

Я пытаюсь динамически загружать картинки на основе файла XML. Проблема, с которой я застрял, - это функция, которая должна возвращать найденный узел из предоставленного идентификатора. Как в следующем коде

function getStudyById(id:String):XMLNode{
    var xl:XMLList = xml.bacase.(@name==id); // xml is a global variable
    return xl.children()[0]; // xl[0] does not work either
    // return (xl.length()>0) ? xl[0] : null;
}

XML выглядит так:

<root>
    <bacase name="a" />
    <bacase name="b" />
</root>

Предвидя ваши вопросы, все это делается в событии COMPLETE загрузчика xml после загрузки XML.

Теперь проблема в том, что XMLList кажется пустым, в то время как xml заполнен правильно, и идентификатор определенно соответствует одному из узлов. Когда я дублирую запрашиваемый узел, список корректно отслеживается как содержащий два узла. Поэтому я предполагаю, что, если есть только одно совпадение, XMLList не создается, а результат содержит данные типа данных XMLNode.

Кто-нибудь есть, чтобы подтвердить это? Если да, есть ли способ гарантировать, что запрос всегда возвращает тип XMLList?

Спасибо Артур

1 Ответ

0 голосов
/ 16 мая 2011

XMLNode работает только со старым flash.xml.XMLDocument.Один узел будет иметь тип XML, если вы используете XML или XMLList.

. Для меня этот фрагмент отлично работает:

var xml:XML = <root>
        <bacase name="a" />
        <bacase name="b" />
    </root>;

var p:XMLList = xml.bacase.(@name == "a");

if (p.length() > 0) return XML(p[0]);
...