在flex中对XML文件的使用大体有两种,其一是在Model中使用,另外就是在HttpService中使用。我们在assets文件夹下创建data.xml文件,内容如下:
<data>
<result month="Jan-04">
<apple>81768</apple>
<orange>60310</orange>
<banana>43357</banana>
</result>
<result month="Feb-04">
<apple>81156</apple>
<orange>58883</orange>
<banana>49280</banana>
</result>
</data>
先看代码
在Model中对其调用:
<?xml version="1.0"?>
<!-- charts/XMLFileDataProvider.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Model id="results" source="assets/data.xml"/>
<mx:Panel title="Line Chart">
<mx:LineChart id="chart" dataProvider="{results.result}">
<mx:horizontalAxis>
<mx:CategoryAxis categoryField="month"/>
</mx:horizontalAxis>
<mx:series>
<mx:LineSeries yField="banana" displayName="Banana"/>
<mx:LineSeries yField="apple" displayName="Apple"/>
<mx:LineSeries yField="orange" displayName="Orange"/>
</mx:series>
</mx:LineChart>
</mx:Panel>
</mx:Application>
使用HttpService调用:
<?xml version="1.0"?>
<!-- charts/HTTPServiceDataProvider.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
width="100%" height="100%" creationComplete="srv.send()">
<mx:HTTPService id="srv" url="../assets/data.xml"/>
<mx:Panel title="Line Chart">
<mx:LineChart id="chart"
dataProvider="{srv.lastResult.data.result}"
>
<mx:horizontalAxis>
<mx:CategoryAxis categoryField="month"/>
</mx:horizontalAxis>
<mx:series>
<mx:LineSeries yField="apple" name="Apple"/>
<mx:LineSeries yField="orange" name="Orange"/>
<mx:LineSeries yField="banana" name="Banana"/>
</mx:series>
</mx:LineChart>
</mx:Panel>
</mx:Application>
比较两者,mx:Model作为一个模型标签,将source路径下的内容直接加载到XMLFileDataProvider.mxml中。经过编译器编译后,存储在生成的swf文件中。就是说数据是存储在客户端的。mx:HTTPService则不同,文件存储在服务器端,在服务器端提供这样一个service接口,creationComplete="srv.send()"的意思就是在初始化完毕会调用这个service,从服务器端去获取这个文件,传到客户端,通过srv.lastResult.data.result来获取。如果不调用这个send方法,客户端的srv.lastResult.data.result就是空的。
还有一点不同的是,调用Model中的result数据是用results.result,而在调用HTTPService中的result时,使用的是srv.lastResult.data.result;区别就在于前者没有父级标签data.后者有。如果在data标签之外再加一层父标签呢?是不是说Model可以直接指定到子标签,而HTTPService必须制定路径才能定义到子标签呢?如下:
<father>
<data>
<result month="Jan-04">
<apple>81768</apple>
<orange>60310</orange>
<banana>43357</banana>
</result>
<result month="Feb-04">
<apple>81156</apple>
<orange>58883</orange>
<banana>49280</banana>
</result>
</data>
</father>
如果我想的没错的话,那么XMLFileProvider是可以正确运行显示数据的,而HTTPServiceProvider中显示的图表中使没有数据的。测试一下看看。。。。
结果。。。两个都没有数据,呃。。。
再将XMLFileProvider中的<mx:LineChart id="chart" dataProvider="{results.result}">改成<mx:LineChart id="chart" dataProvider="{results.data.result}">试试看呢?果然,行了。再试试,改成<mx:LineChart id="chart" dataProvider="{results.father.data.result}">,结果没有数据。
经实践,证明:使用Model时,是不需要调根标签的。
那么就有一个新问题,我的xml文件里如果只有一个根标签,如下:
<data>12345</data>
我想通过Model在一个text中将数据显示出来怎么办呢?
先写一个XMLFlieRootTest.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Model id="results" source="assets/data.xml"/>
<mx:HBox>
<mx:Label text="data value="/>
<mx:Text text="{results.data}"/>
</mx:HBox>
</mx:Application>
运行一下,是没有数据的。暂时只能在外面再加一层父标签,才能够调到data的值。而且在这个xml文件中有且只有一个根标签,只做框架使用,不存数据。
使用Model的时候可以先将数据存储到ArrayCollection中
如下:
<?xml version="1.0"?> <!-- charts/XMLFileToArrayCollectionDataProvider.mxml --> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" height="100%"> <mx:Script> import mx.utils.ArrayUtil; </mx:Script> <mx:Model id="results" source="../assets/data.xml"/> <mx:ArrayCollection id="myAC" source="{ArrayUtil.toArray(results.result)}" /> <mx:Panel title="Line Chart"> <mx:LineChart id="chart" dataProvider="{myAC}"> <mx:horizontalAxis> <mx:CategoryAxis categoryField="month"/> </mx:horizontalAxis> <mx:series> <mx:LineSeries yField="banana" displayName="Banana"/> <mx:LineSeries yField="apple" displayName="Apple"/> <mx:LineSeries yField="orange" displayName="Orange"/> </mx:series> </mx:LineChart> </mx:Panel> </mx:Application>
这样做的好处是一次存储,多次调用。不用每次都到model里面去取。
同样,HTTPService也可以使用ArrayCollection
<?xml version="1.0"?> <!-- charts/HTTPServiceToArrayCollectionDataProvider.mxml --> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="srv.send()"> <mx:Script><![CDATA[ import mx.collections.ArrayCollection; [Bindable] public var myData:ArrayCollection; ]]></mx:Script> <mx:HTTPService id="srv" url="../assets/data.xml" useProxy="false" result="myData=ArrayCollection(srv.lastResult.data.result)" /> <mx:Panel title="Line Chart"> <mx:LineChart id="chart" dataProvider="{myData}"> <mx:horizontalAxis> <mx:CategoryAxis categoryField="month"/> </mx:horizontalAxis> <mx:series> <mx:LineSeries yField="apple" name="Apple"/> <mx:LineSeries yField="orange" name="Orange"/> <mx:LineSeries yField="banana" name="Banana"/> </mx:series> </mx:LineChart> </mx:Panel> </mx:Application>
HTTPService还可以使用XMLListCollection来存储。将服务器端传过来的数据首先设置成E4X就可以了,如下:
<?xml version="1.0"?> <!-- charts/HTTPServiceToXMLListCollection.mxml --> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="srv.send()"> <mx:Script><![CDATA[ import mx.utils.ArrayUtil; ]]></mx:Script> <mx:HTTPService id="srv" url="../assets/data.xml" resultFormat="e4x" /> <mx:XMLListCollection id="myAC" source="{srv.lastResult.result}" /> <mx:Panel title="Line Chart"> <mx:LineChart id="chart" dataProvider="{myAC}"> <mx:horizontalAxis> <mx:CategoryAxis categoryField="month"/> </mx:horizontalAxis> <mx:series> <mx:LineSeries yField="apple" name="Apple"/> <mx:LineSeries yField="orange" name="Orange"/> <mx:LineSeries yField="banana" name="Banana"/> </mx:series> </mx:LineChart> </mx:Panel> </mx:Application>
值得一提的是在flexbuilder2中对内存的管理不完善,创建的ArrayCollection, XMLListCollection每次编译都会贮存在内存里,没有及时回收就会造成内存泄漏。善用。
不信你就在flexbuilder2里面建这样几个文件,然后多改几次,它在自动编译的模式下,就会出现outofmemory的错误。
分享到:
相关推荐
在Flex开发中,数据展示控件常常需要与数据提供者(DataProvider)进行绑定,以便将数据模型呈现出来。本文将详细探讨如何使用`ArrayCollection`作为Flex中的`Tree`控件的数据提供者,以替代通常使用的XML数据源。 ...
- `tree.dataProvider = results` 将XML数据绑定到Tree组件,使其显示在界面上。 - `for` 循环遍历所有的子节点,并通过 `attribute("label")` 和 `attribute("data")` 访问它们的属性值。 3. `initApp` 函数在...
<List id="albumList" dataProvider="{myDataProvider}"> ``` 在这里,`local:AlbumItemRenderer`是我们的自定义ItemRenderer类。 此外,我们还需要处理数据绑定和事件响应。数据绑定允许我们在...
在Flex中,可以通过Tree的dataProvider属性来设置数据源。为了实现递归绑定,可以自定义一个TreeItemRenderer,该渲染器知道如何根据XML节点的子节点创建新的TreeItems。 ```actionscript var tree:Tree = new Tree...
<mx:List dataProvider="{xmlData.item}" /> ``` 5. **XML表达式**:Flex支持使用XML表达式(XPath-like)来访问特定的XML节点。例如,获取第一个`item`的值: ```actionscript var firstItemValue:String = ...
在Flex开发中,Tree组件是一种常用的用户界面元素,用于展示层次结构的数据。它通常用于文件系统、组织...在"tree_dataProvider.mxml"文件中,你可以找到关于这个主题的具体示例代码,帮助你更好地理解和实践这些概念。
dataProvider="{employeeData}" width="300" height="400" dragEnabled="true" dropEnabled="true" dragMoveEnabled="true" allowMultipleSelection="true" > ``` 在这段代码中: - `dragEnabled="true"`:...
`users.children()` 返回一个 `XMLList`,将其转换为 `XMLListCollection` 以便在 `DataGrid` 中使用。 5. **DataGrid组件**:`<mx:DataGrid>` 是用来展示数据的组件。它的 `dataProvider` 属性设置为 `users....
在本文中,我们将深入探讨如何使用Flex来解析XML文件,并将其内容用作ComboBox下拉列表的数据源。首先,让我们理解Flex的基本概念。Flex是Adobe开发的一种开放源代码的富互联网应用程序(RIA)框架,用于构建和部署...
如`<mx:DataGrid dataProvider="{xmlData..childNodeName}" />`。 4. **事件监听**:可以监听XML数据的变化,例如,当XML数据更新时触发特定操作。 【JSON操作】 1. **解析JSON**:Flex使用`flash.utils.parse...
2. **加载XML数据**:在Flex应用中,我们可以使用`XML`类加载并解析XML文件。例如: ```actionscript var urlLoader:URLLoader = new URLLoader(); urlLoader.dataFormat = URLLoaderDataFormat.TEXT; urlLoader....
描述:此代码示例展示了如何在Flex应用程序中使用XML数据来动态生成一个树形结构(Tree)。Flex是Adobe Systems开发的一款开源框架,用于构建跨平台的桌面和移动设备应用。这段代码通过HTTPService组件从外部XML文件...
接下来,我们将通过一个具体的例子来展示如何在Flex中使用XML。 ##### 创建服务器端代码 服务器端代码负责生成XML数据并将其返回给客户端。以下是一个简单的JSP文件,用于生成关于两家公司(compa和compb)的股票...
<mx:Tree id="myTree" dataProvider="{xmlData}" labelField="@label"/> ``` 这里,`xmlData`应该是一个`XMLListCollection`对象,它是从XML文档转换而来的。可以使用`XML`类和`XMLList`来解析XML: ```...
通过以上步骤,你可以有效地在Flex应用中使用XML数据。记住,根据项目需求,可能还需要处理错误、优化性能或者添加额外的功能,如分页、排序和过滤。总之,Flex结合XML提供了一种强大且灵活的方式来处理和展示数据,...
1. **XML解析**:在Flex中,我们可以使用`mx:XML`组件或`flash.xml.XMLDocument`类来解析XML数据。XML是一种常见的数据格式,用于存储和传输结构化数据。在示例中,XML可能包含一系列可选项,这些选项将被用作...
- **XMLList和XMLListCollection**: 将XML转换为XMLList或XMLListCollection,然后设置给Tree的`dataProvider`属性,这样就可以显示XML数据。 - **节点标签和子节点**: XML元素的文本可以作为节点的标签,而子元素...
在Flex中,我们可以通过设置Tree组件的`dataProvider`属性来绑定XML数据。首先,我们需要加载XML文件,然后使用`XMLListCollection`将其转换为可以被Tree识别的数据结构。以下是一个简化的代码示例: ```...
在这个例子中,我们将XML文件中的`color`元素转换为了`ArrayCollection`类型,以便在Flex应用中使用。 #### 方法二:使用URLLoader读取XML文件 除了`HTTPService`外,`URLLoader`也是Flex中另一个常用的方法来读取...