2013-02-07 107 views
1

我嘗試過可能的例子,我在這裏找到並在新的(Google)上找到。 似乎沒有任何工作。ActionScript 3從網站解析XML

我有一個XML文件,我到網站的調用後得到:

<?xml version="1.0" encoding="iso8859-1" ?> 
<Database version="1.24" xmlns="http://1234.com"> 
    <Session> 
    <Key>1234</Key> 
    <Count>2424</Count> 
    <SubExp>Sun Dec 1 00:00:00 2013</SubExp> 
    <GMTime>Thu Feb 7 19:38:03 2013</GMTime> 
    <Remark>cpu: 0.058s</Remark> 
    </Session> 
</Database> 

OK我加載到一個XML對象,像這樣:

var xml:XML = new XML(event.target.data); 

好迄今爲止對象包含XML數據:

<Database version="1.24" xmlns="http://1234.com"> 
     <Session> 
     <Key>1234</Key> 
     <Count>2424</Count> 
     <SubExp>Sun Dec 1 00:00:00 2013</SubExp> 
     <GMTime>Thu Feb 7 19:38:03 2013</GMTime> 
     <Remark>cpu: 0.058s</Remark> 
     </Session> 
    </Database> 

現在我需要閱讀下的會話密鑰值,所以我曾嘗試:

xml.Session.Key 
xml.Session[0].Key 
xml[0].Session.Key 

他們中的一些返回一個空字符串有些只是錯誤,無論哪種方式沒有數據?

所以在表達式窗口中,我輸入xml [0] [0]來查看會發生什麼。

它返回鍵的值,但是當我把它放在我的代碼

var key:String = xml[0][0]; 
trace(key): 

跟蹤返回整個XML文件? 所以我不確定我可能會錯過什麼?

回答

3

問題在於命名空間。

試試這個:

var xml:XML = new XML(event.target.data); 
var ns:Namespace = xml.namespace(); 
trace(xml.ns::Session.ns::Key); 

而且,這可能是一個壞主意,但我只是想一些數據,並不在乎命名空間(或他們是不相關的,我什麼這樣做),我有這個方便的功能,它們去掉,沒有他們返回的XML對象:

public function stripNamespaces(xml:XML):XML { 

    const DECLARATION_REG_EXP:RegExp = new RegExp("xmlns[^\"]*\"[^\"]*\"", "gi"); 

    var namespaceDeclarations:Array = xml.namespaceDeclarations(); 

    for (var i:int = 0; i < namespaceDeclarations.length; i++) { 
     xml.removeNamespace(namespaceDeclarations[i]); 
    } 

    return new XML(xml.toString().replace(DECLARATION_REG_EXP, ""));   
} 
+0

不錯,你打我幾秒鐘:)我不知道這種類型的語法...即將刪除我的答案,但我會離開它,因爲它可能會更簡潔,如果他們想要使用大量的e4x表達式。 –

+0

Sunil您的解決方案也可以運行,但是當您使用多個具有不同名稱空間的xml對象時,會遇到問題。 – Scott

+0

整潔!謝謝你的解釋(希望我可以upvote兩次)。 –

0

由於您的XML有一個命名空間,你需要告訴閃存/ E4X使用它:

private var xml:XML = 
    <Database version="1.24" xmlns="http://1234.com"> 
     <Session> 
     <Key>1234</Key> 
     <Count>2424</Count> 
     <SubExp>Sun Dec 1 00:00:00 2013</SubExp> 
     <GMTime>Thu Feb 7 19:38:03 2013</GMTime> 
     <Remark>cpu: 0.058s</Remark> 
     </Session> 
    </Database>; 

private function onCreationComplete():void 
{ 
    namespace myNameSpace = "http://1234.com"; 
    use namespace myNameSpace; 
    var value:String = xml.Session.Key; 
    trace("value:", value); // outputs: value: 1234 
} 
+0

txs蘇尼爾來幫助我... – Mike