2010-07-20 56 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... 
}