Мне кажется лучше не мудрить, а записать циклом. Тем более, что все
эти E4X штучки всё равно делаются через теже самые циклы, так что
никакого выигрыша в производительности они не дают.
если я правильно понял что требуется
то можно записать так
xmlList.(valueOf() == _node).childIndex();
p.s.
естественно при условии что
что _node в xmlList только один
|
|
А что выдает xmlList.length() ?
Возможно, у xml, из которого получается лист стоит ignoreWhiteSpace =
false. Тогда все переводы строки и отступы превращаются в элементы
листа. Попробуйте перед созданием xmlList указать явно
xml.ignoreWhiteSpace = true.
Сергей Крук
======================================
2009/5/29 Roma Oskolkov <r.osk...@gmail.com>:
> Привет всем.
>
> Столкнулся тут с простой на вид задачкой, да не так всё просто оказалось.
>
> Есть xml-нод.
> Нужно узнать есть ли этот нод в одном XMLList'е или нет.
> Если есть -- то какой он по счету.
> Да вот только ChildIndex выдает какие-то дикие величины. 10, и так далее.
Метод childIndex() возвращает позицию нода не в текущем объекте
XMLList а позицию в своём родителе.
т.е. всегда, кким бы способом узел бюыл получен, если у него есть
родительский узел, childIndex() всегда
должно возвращать одно и то же число.
К примеру, если есть такой XML:
protected var xml:XML = <root>
<child>
<descendant/>
</child>
<child>
<descendant/>
</child>
<child>
<descendant>
<ZeroIndexNode/>
<OneIndexNode/>
</descendant>
</child>
</root>;
и мы берём такой список:
var xlist:XMLList = xml..*;
то childIndex() узла OneIndexNode всё равно будет 1, хоть он и в конце листа.
var node:XML = <OneIndexNode/>;
trace(xlist.(valueOf()==node)[0].childIndex()); // 1
Поэтому лучше перебирать лист обычным for each() или while():
var i:int=0;
while(xlist[i]!=node) i++;
trace(i, xlist[i].toXMLString());
Или извратиться с таким фильтром:
var i:int=0;
var notFound:Boolean = true;
xlist.(notFound ? (valueOf()==node ? found=true : i++) : null);
trace(i, xlist[i].toXMLString(), "isFound:", i!=xlist.length);
Надеюсь, в тему.
--
Oleg Galaburda
http://blog.actualwave.com/
Должно. Если XMLList содержит всего один элемент(и только) то XMLList
повторяет все методы объекта XML.
Классно сделали, чтоб не пришлось каждый раз указывать нулевой индекс
parent.child[0].attributes();
node.@attribute[0] = "value";