2010-01-21 26 views
3

想看看有趣的東西嗎?atom feed xmlns屬性混淆AS3的XML解析?

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個'進入'子節點。

回答

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

尼斯,顯然我們來到在同一時間相同的結論。不過,我會讓你有'接受的答案'。 –

+2

另一件你可以做的快捷方式是 - var atom:Namespace = xml.namespace()//選擇默認的 trace(xml.atom :: entry.length()); ......這樣做的好處是,即使沒有定義名稱空間,它也可以工作,這非常酷。 –