Атрибут xmlns фида атомов портит XML-разбор AS3? - PullRequest
3 голосов
/ 22 января 2010

Хотите увидеть что-нибудь интересное?

var xml:XML = XML(<feed><entry /><entry /><entry /></feed>);
trace(xml.entry.length())   // returns 3

Имеет смысл, верно? Теперь давайте добавим этот атрибут ...

var xml:XML = XML(<feed xmlns="http://www.w3.org/2005/Atom"><entry /><entry /><entry /></feed>);
trace(xml.entry.length())   // returns 0

Ну, это не может быть правдой. Давайте попробуем это с другим атрибутом.

var xml:XML = XML(<feed test="okay"><entry /><entry /><entry /></feed>);
trace(xml.entry.length())   // returns 3

Кто-нибудь знает, что вызвало бы это? Я использовал Atom в качестве примера, но любой атрибут 'xmlns' в корневом узле, похоже, имеет такой эффект. Возвращаемое значение равно false - очевидно, что все еще есть 3 дочерних узла 'entry' независимо от атрибутов, которыми обладают их родители.

1 Ответ

10 голосов
/ 22 января 2010

Здесь возможны обходные пути:

var xml:XML = XML(<feed xmlns="http://www.w3.org/2005/Atom"><entry /><entry /><entry /></feed>) ;
trace(xml.entry.length()) ;
// output: 0

var ATOM:Namespace = new Namespace( "http://www.w3.org/2005/Atom" );
trace(xml.ATOM::entry.length()) ;
// output: 3

default xml namespace = ATOM;
trace(xml.entry.length()) ;
// output: 3

Обновление

LiveDocs.Adobe.Com

...