其实以前就遇到过这个问题,只是这次再次遇到,把最终的解决办法列出来:
问题:
当使用HTTPService读取XML文件时,存在多个XML节点时,其类型为ArrayCollection,但当节点为1时,其类型不是ArrayCollection而是ObjectProxy了
拿一个实际的XML举例,我需要提取其中的Question节点以生成相应投票题目。
情形一:存在多个Question(两个或两个以上)节点时,直接可以将其作为ArrayCollection来使用,没有任何问题;
情形二:当仅存在一个Question节点时,若直接当成ArrayCollection来处理便会出错,通过Debug可以发现,这时的类型为ObjectProxy(关于ObjectProxy类型的含义可以查看参考手册),这时候就需要额外处理了。
情形一XML:
<Vote State="ok">
<Survey>
<SurveyHead>
<Title>aaaaaaaaaaaaaaaaaaaaaaaaaaaaa</Title>
<Author>1</Author>
</SurveyHead>
<SurveyBody>
<Question>
<Describe>asdfasdfadf</Describe>
<Type>单选</Type>
<Options>
<item id="1" Content="asdfasdfasdfasd" Result="0"/>
<item id="2" Content="asdfasdfasdf" Result="0"/>
<item id="3" Content="dddd" Result="0"/>
</Options>
<Hot>0</Hot>
</Question>
<Question>
<Describe>hstgsdfgsdfg</Describe>
<Type>多选</Type>
<Options>
<item id="1" Content="sdhsdgagf" Result="0"/>
<item id="2" Content="setesrgsg" Result="0"/>
<item id="3" Content="35w3asfag" Result="0"/>
</Options>
<Hot>0</Hot>
</Question>
</SurveyBody>
</Survey>
</Vote>
情形二XML:
<Vote State="ok">
<Survey>
<SurveyHead>
<Title>aaaaaaaaaaaaaaaaaaaaaaaaaaaaa</Title>
<Author>1</Author>
</SurveyHead>
<SurveyBody>
<Question>
<Describe>asdfasdfadf</Describe>
<Type>单选</Type>
<Options>
<item id="1" Content="asdfasdfasdfasd" Result="0"/>
<item id="2" Content="asdfasdfasdf" Result="0"/>
<item id="3" Content="dddd" Result="0"/>
</Options>
<Hot>0</Hot>
</Question>
</SurveyBody>
</Survey>
</Vote>
最终找到的一个比较好的解决办法如下:
var arry:ArrayCollection;
if(evt.result.Vote.Survey.SurveyBody.Question is ObjectProxy) {
arry = new ArrayCollection([evt.result.Vote.Survey.SurveyBody.Question]);
}else {
arry = evt.result.Vote.Survey.SurveyBody.Question as ArrayCollection;
}
以后就可以全当成ArrayCollection处理了。
来源:http://www.jexchen.com/?tag=actionscript3
分享到:
相关推荐
flex通过httpService读取xml数据到datagird中,通过读取远程URL的XML数据(这里保存到本地),保存到ArrayCollection中,然后在将ArrayCollection绑定到datagird上 环境:flex3.0 可直接运行
1. Flex发送:在Flex客户端,当用户触发某个操作时,HttpService发送XML数据到服务器,数据内容由Flex的XML对象构建。 2. 春天处理:SpringMVC接收到请求后,通过XMLMessageConverter解析XML数据,然后将数据传递给...
当XML文档中某个节点有多个子节点时,通常会返回一个XMLList对象。我们可以使用XPath表达式或属性访问语法来访问XMLList中的节点。 接下来,我们关注HTTPService。HTTPService是Flex的网络服务组件,用于与Web...
Flex加载xml数据三种方式:HTTPService XMLLoader XML类
假设我们要删除id为"2"的item节点: ```actionscript var itemToRemove:XML = xmlData.item.(@id == '2')[0]; xmlData.removeChild(itemToRemove); treeItems.removeItemAt(treeItems.getItemIndex(itemToRemove));...
当请求成功完成时,`resultHandler`函数会被调用,其中的`event.result`包含了XML文件的内容。在这个例子中,我们将XML文件中的`color`元素转换为了`ArrayCollection`类型,以便在Flex应用中使用。 #### 方法二:...
在这个例子中,`resultFormat` 设置为 "object",意味着当 HTTPService 接收到响应时,它会尝试将 XML 数据转换为 ActionScript 对象。这样,我们可以像操作本地对象一样直接访问 XML 中的节点值,而无需手动解析 ...
1. 使用HTTPService读取XML文件 HTTPService是Flex提供的一种用于与Web服务器进行异步通信的组件,它基于HTTP协议。以下是如何使用HTTPService来获取并解析XML数据的步骤: (1)导入必要的库: ```actionscript ...
当需要发送请求时,只需调用`HTTPService`对象的`send()`方法: ```actionscript httpService.send(); ``` 5. **处理XML数据**: `handleResult`函数中的`XML(event.result)`会将返回的数据转换为XML对象,你...
4. **处理响应**:HTTPService的`result`事件会在接收到服务器响应时触发。你可以添加一个事件监听器来处理返回的数据。例如: ```actionscript httpService.result = function(event:ResultEvent):void { var ...
标题中的“使用asx3m与xstream配合解决flex与java利用httpservice传递xml数据问题”涉及到了几个关键的技术点,主要包括Flex前端开发、Java后端开发、HTTPService的使用、XML数据交换以及asx3m和xstream这两个库的...
本文档主要介绍了如何将Adobe Flex与Java JSP结合,并利用HTTPService与Java后端通过XML进行通信。Flex是一种用于构建富互联网应用程序(RIA)的开发框架,而JSP则是Java服务器页面,常用于创建动态网页。在本过程中...
- 读取本地XML时,注意权限问题,确保应用有访问指定文件的权限。 - 当处理大量XML数据时,优化性能,如使用迭代器而非递归,避免不必要的转换和复制。 综上所述,Flex中的XML操作涉及文件系统访问、网络通信、...
例如,`xmlData.root.item[@id='1']`将返回`id`属性为`1`的`item`元素。 总的来说,Flex中的XML解析框架结合HTTPService,为我们提供了一种有效的方法来处理服务器返回的XML数据。通过理解和熟练运用这些工具,...
1. **配置HTTPService** 在Flex项目中,使用HTTPService组件需要在MXML或AS3代码中声明并配置。设置URL指向Java Web服务的地址,方法通常为GET或POST。例如: ```xml <mx:HTTPService id="javaService" url=...
假设我们已经将"roomList.xml"解析为一个Room对象的列表,并存储在LiveData实例中,那么当列表数据更新时,关联的UI组件会自动接收到新的数据并进行刷新,无需手动调用更新方法。 总结一下,"将HttpService结果返回...