2013-02-07 75 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