Atom Feed的xmlns属性会影响AS3的XML解析吗?

3

想看点有趣的东西吗?

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”属性似乎都会产生这种影响。返回的值是错误的——显然,无论其父节点具有什么属性,仍然存在3个“entry”子节点。

1个回答

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

更新

LiveDocs.Adobe.Com


1
很好,显然我们同时得出了相同的结论。不过我会让你拥有“被采纳的答案”。 - matt lohkamp
2
你可以采用另一种方法来简化它 -var atom:Namespace = xml.namespace() // 选择默认的命名空间 trace(xml.atom::entry.length()) ;... 这样做的好处是,即使没有定义命名空间,它也能正常工作,这非常棒。 - matt lohkamp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接