atom feed xmlns属性搞砸了AS3的XML解析?

mat*_*amp 3 xml rss parsing actionscript-3 xml-namespaces

想看看有趣的东西吗?

var xml:XML = XML(<feed><entry /><entry /><entry /></feed>);
trace(xml.entry.length())   // returns 3
Run Code Online (Sandbox Code Playgroud)

有道理,对吗?现在让我们添加这个属性......

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

那不可能是对的.让我们尝试不同的属性.

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

谁知道会导致什么?我以atom为例,但根节点上的任何'xmlns'属性似乎都有这种效果.返回的值是直接错误的 - 显然仍有3个"条目"子节点,无论父母拥有什么属性.

St.*_*and 10

以下是可能的解决方法:

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
Run Code Online (Sandbox Code Playgroud)

更新

LiveDocs.Adobe.Com

  • 你可以做的另一件事快捷有点是 - VAR原子://拿起默认跟踪命名空间= xml.namespace()(xml.atom :: entry.length()); ...而且这样做的好处是,即使没有定义名称空间,它也会起作用,这很酷. (2认同)