2010-07-20 74 views
0

我正在嘗試使用Flex作爲客戶端與API進行通信。 我正在使用Flash Builders HTTPServices來做到這一點,對所有這些都做了一點小事。 如果訪問的XML文件元素格式正確,所有工作正常,但如果我添加一個連字符到元素名稱我撓撓我警告事實即。返回的對象包含「創建上」是一個無效的名稱不符合的ActionScript標識符命名規則Flex HTTPServices和有效的xml

這工作:

<?xml version="1.0" encoding="UTF-8"?> 
<projects type="array"> 
    <project> 
    <createdon>2010-07-10</createdon> 
    <name>Project 1</name> 
    </project> 
</projects> 

這不:

<?xml version="1.0" encoding="UTF-8"?> 
<projects type="array"> 
    <project> 
    <created-on>2010-07-10</created-on> 
    <name>Project 1</name> 
    </project> 
</projects> 

我的問題,然後是我能做些什麼來使返回的XML動作腳本友好。有沒有這方面的標準或最佳做法?我顯然不能控制被傳遞的xml。

乾杯

回答

-1

HTTPServiceresultFormate4xxml。默認值爲object,因此Flex會嘗試爲xml樹中的每個元素創建ActionScript對象。

<mx:HTTPService resultFormat="xml" other="attributes go here"/> 
+0

這不利於 – Pakman 2012-02-15 18:05:22

+0

@Pakman我沒有Flex構建器來嘗試此操作,所以希望您在投票前進行驗證。 – Amarghosh 2012-02-15 19:20:43

+0

作者問如何用連字符處理XML節點。即使您將'resultFormat'更改爲'e4x',您仍然必須使用括號來引用節點。但是,我對Flex很陌生,所以我可能是錯的。 – Pakman 2012-02-16 15:54:42

0

爲了將來參考,請使用方括號。例如:

private var createdOn:String; 

protected function myService_requestHandler(event:ResultHandler):void 
{ 
    createdOn = event.result.projects.project["created-on"]; 
} 
0

如果你真的想不訪問內容「 - 」將resultFormat爲「文本」,然後像做:

onLoad(event:ResultEvent):void 
{ 
    var result:String = event.result; 
    result = result.replace(/created-on/g, 'createdOn'); 
    var xml:XML = new XML(result); 
    // do your processing now... 
}