2012-05-12 90 views
0

我想可以從XML文檔加載所有的XML數據,並已經失敗了一夜就可以了,甚至有研究加載XML到Flex AS3

這裏是XML我試圖加載的片段:

<?xml version="1.0"?> 
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <id>urn:uuid:5762c9e8-4e65-3b0c-83b3-7874683f3dbe</id> 
    <link href="/v1/espi_third_party_batch_feed" rel="self"> 
    </link> 
    <title type="text">Opower ESPI Third Party Batch Feed v1</title> 
    <updated>2012-04-03T22:55:36.364Z</updated> 

    <entry> 
    <id>urn:uuid:baa6a50a-1306-3680-80a4-51d228db8f25</id> 
    <link href="/v1/User/3560606/UsagePoint/6403112/MeterReading/1/IntervalBlock/1" rel="self"> 
    </link> 
    <content type="xml"> 
     <IntervalBlock xmlns="http://naesb.org/espi"> 
     <interval> 
      <duration>3600</duration> 
      <start>1299128400</start> 
     </interval> 
     <IntervalReading> 
      <timePeriod> 
      <duration>3600</duration> 
      <start>1299128400</start> 
      </timePeriod> 
      <value>436</value> 
     </IntervalReading> 
     </IntervalBlock> 
    </content> 
    </entry> 
</feed> 

下面是AS3的代碼,我在XmlLoader不解的一個片段:

public function returnArray():Array 
    {   
     var ATOM:Namespace = new Namespace("http://www.w3.org/2005/Atom"); 
     var NAESB:Namespace = new Namespace("http://naesb.org/espi"); 
     trace("entered returnArray"); 
     var tempArray:Array = new Array(); 
     var x:Number = 0; 
     var y:Number = 0; 
     var entries = this.docXML.ATOM::entry; 
     trace(entries.length());    //returns 4 and supposed to 
     trace(entries[3].content.length());  //returns 0 supposed to return 1 
     trace(this.docXML.ATOM::entry[3].content.NAESB::interval.length()); //returns 0`enter code here` 
+0

對不起,您在此任務中失敗。你能告訴我們爲什麼/你如何失敗?問題是什麼?你有運行時錯誤嗎?或者是其他東西?我錯過了分享載入XML的代碼的部分嗎? – JeffryHouser

+0

沒有錯誤,它只是不允許我訪問標籤IntervalBlock中的嵌套xmlns,以便我可以讀取嵌套在該標籤內的時間/能量使用情況,並且因爲我正在嘗試爲any1可以使用的應用程序由於這些數據是由美國能源公司提供的標準格式,因此不能刪除xmlns標籤 –

+0

您的主題行聲稱此問題是加載數據;但它聽起來像你的問題是加載後訪問數據。那是對的嗎?你說「它不允許你訪問嵌套的xmlns?什麼不是?你的XML沒有任何特殊的命名空間項目,但它看起來像你試圖訪問它們,就好像它們在命名空間中一樣。 – JeffryHouser

回答

0

首先,你應該看看the documentation for e4x。其次:你究竟想要做什麼?

最後一行你可以更改爲this.docXML.ATOM::entry.content..NAESB::interval.length()但我不確定你真的想從xml文檔中找到什麼。獲取節點的長度對於從XML文件中獲取實際數據並不是很有用。

+0

我想實際獲得對條目標籤內部數據的訪問權限;使用名稱空間類我能夠訪問條目類,但似乎無法獲得名稱空間類,以便讓我訪問條目類中的任何內容。但是,如果我要跟蹤(條目[3]);它讀取整個XML文檔。我的問題是,因爲這些數據是電氣公司提供的信息,我不能改變他們的數據,如果我想讓別人使用我的應用程序,所以我試圖訪問間隔標記來使用那裏的數據,但s因爲它嵌套在另一個xmlns內我似乎無法獲得 –

+0

我有一種感覺,它必須處理id urn:uuid,這使得它獨一無二 –

0

這個問題的答案感謝frankhermes和www.Flextras.com用於幫助我學習是爲了繼續遍歷有需要增加ATOM的另一個命名空間到XML保持穿越

var entries = this.docXML.ATOM::entry; 
trace(entries[3].content.length()); 

應該是

var entries = this.docXML.ATOM::entry; 
trace(entries[3].ATOM::content.length());