В XML выборка элементов через знак звёздочки говорит о том, что надо выбрать все дочерние узлы, не зависимо от типа узла или пространства имён XML элемента. Класс flash.utils.Proxy даёт нам возможность пользоваться выборками в своих классах. Я обнаружил разницу в поведении и дальше делюсь наблюдениями.
Вот, результат такой выборки в XML документе:
var xml:XML = <root xmlns:ns="urn:some-uri"> <node1/> <node2/> <node3/> <ns:node4/> <ns:node5/> <ns:node6/> </root>; trace(xml.*.toXMLString()); /* <node1 xmlns:ns="urn:some-uri"/> <node2 xmlns:ns="urn:some-uri"/> <node3 xmlns:ns="urn:some-uri"/> <ns:node4 xmlns:ns="urn:some-uri"/> <ns:node5 xmlns:ns="urn:some-uri"/> <ns:node6 xmlns:ns="urn:some-uri"/> */
Выбраны все узлы, не зависимо от пространства имён в котором он лежит.
Если реализовать метод flash_proxy::getProperty() для наследника flash.utils.Proxy, то в случае такой выборки в этот метод будет передаваться экземпляр QName в базовом пространстве имён, т.е. его свойство uri будет равно пустой строке. Это может вызвать проблемы, т.к. все свойства в любых других пространствах имён будут опущены. А для того чтоб выбрать все значения во всех пространствах имён из наследника flash.utils.Proxy необходимо делать выборку через .*::*(для XML эта выборка коснётся исключительно узлов типа ELEMENT) - так вы указываете любое пространство имён и в метод flash_proxy::getProperty() будет передан экземпляр QName c uri равным NULL, что и требовалось, собственно.
Это не есть ошибка, т.к. в XML два вида узлов из пяти поддерживает пространства имён, поэтому в такой выборке они просто опускаются, а когда в выборке конкретно указывается пространство имён, то учитываются только элементы(или атрибуты, если делать выборку указав это).
Это мой опыт работы с flash.utils.Proxy и я не знаю как вы реализуете методы в наследниках flash.utils.Proxy, так что возможно для вас подобная ситуация окажется нормальной. Меня же подобная разность в поведении насторожила, поэтому и подчеркнул.
Метки: flash.utils.Proxy, Proxy, XML