无法在Action Script 3(AS3)中访问子节点

时间:2013-12-08 14:25:30

标签: xml flash nodes actionscript-3

我无法访问XML文件中的任何节点。 我可以跟踪整个文件但是一旦我尝试访问XML内部的任何节点,跟踪就不会返回任何内容。 基本上使XML数据无法使用。

AS3代码:

    var citReq1:URLRequest = new URLRequest("http://serverstuff.com...format=xml");
citReq1.contentType = "text/xml";
citReq1.method = URLRequestMethod.POST;
var citLoad1:URLLoader = new URLLoader();
citLoad1.load (citReq1);

citLoad1.addEventListener(Event.COMPLETE, citData)
function citData (event:Event):void{
    var xmlInfo:XML = new XML(event.target.data)

    trace(xmlInfo);
}

返回XML:

<realtimeinformation xmlns="http://schemas.datacontract.org/2004/07
/ie.dcc.rtpi2.services.publicservices.contracts.RealTimeBusInformation" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<errorcode>0</errorcode>
<errormessage/>
<numberofresults>1</numberofresults>
<stopid>243171</stopid>
<timestamp>07/12/2013 14:42:57</timestamp>
<results>
<result>
<arrivaldatetime>07/12/2013 14:47:00</arrivaldatetime>
<duetime>4</duetime>
<departuredatetime>07/12/2013 14:47:00</departuredatetime>
<departureduetime>4</departureduetime>
<scheduledarrivaldatetime>07/12/2013 14:47:00</scheduledarrivaldatetime>
<scheduleddeparturedatetime>07/12/2013 14:47:00</scheduleddeparturedatetime>
<destination>C.I.T.</destination>
<destinationlocalized>C.I.T.</destinationlocalized>
<origin>Kent Station</origin>
<originlocalized>Kent Station</originlocalized>
<direction>I</direction>
<operator>BE</operator>
<additionalinformation/>
<lowfloorstatus>no</lowfloorstatus>
<route>205</route>
<sourcetimestamp>07/12/2013 14:17:44</sourcetimestamp>
</result>
</results>
</realtimeinformation>

我做了很多搜索,找到了另外一个有这个问题的人,他们的解决方案涉及设置名称空间。当我尝试我可以访问XML中的节点,但点击屏幕上的任何其他按钮给我 一个Actionscript错误弹出窗口:

ReferenceError: Error #1065: Variable Final_fla::ns is not defined.
at Final_fla::MainTimeline/menu()[Final_fla.MainTimeline::frame1:125]

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

你还没有证明哪里&amp;你是如何无法从XML中获取数据的。但是,我可以说你现在写的方式,xmlInfo是你的citData听众的局部变量;意思是:你没有把它保存在任何持久性的地方,当你离开听众时,任何对xmlInfo的引用都会返回null

试试这个:

loadXML("http://serverstuff.com...format=xml");

function loadXML(request:String):void {
    var req:URLRequest = new URLRequest(request);
    req.contentType = "text/xml";
    req.method = URLRequestMethod.POST;

    var loader:URLLoader = new URLLoader();
    loader.addEventListener(Event.COMPLETE, citData)
    loader.load(req);
}

var xmlInfo:XML;
function citData(e:Event):void{
    xmlInfo = new XML(e.target.data)
    trace(xmlInfo);

    exampleExternalFunction();
}

function exampleExternalFunction():void {
    trace(xmlInfo.timestamp)
}

我对xml引用有点生疏,所以你可能需要xmlInfo.realtimeinformation.timestamp。无论如何,在这个例子中,我们已经将XML存储在exampleExternalFunction()可用的持久范围内,从而允许它引用我们从XML接收的属性。