`
seya
  • 浏览: 360563 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

flex中对XML的使用-dataProvider

阅读更多

      在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的错误。

 

 

 

 

 

 

 

1
1
分享到:
评论

相关推荐

    用ArrayCollection当做flex中Tree控件的DataProvider

    在Flex开发中,数据展示控件常常需要与数据提供者(DataProvider)进行绑定,以便将数据模型呈现出来。本文将详细探讨如何使用`ArrayCollection`作为Flex中的`Tree`控件的数据提供者,以替代通常使用的XML数据源。 ...

    Flex之URLLoader加载XML

    - `tree.dataProvider = results` 将XML数据绑定到Tree组件,使其显示在界面上。 - `for` 循环遍历所有的子节点,并通过 `attribute("label")` 和 `attribute("data")` 访问它们的属性值。 3. `initApp` 函数在...

    flex itemRenderer深入学习--flex相册例子

    &lt;List id="albumList" dataProvider="{myDataProvider}"&gt; ``` 在这里,`local:AlbumItemRenderer`是我们的自定义ItemRenderer类。 此外,我们还需要处理数据绑定和事件响应。数据绑定允许我们在...

    动态绑定XML,实现flex树控件的绑定

    在Flex中,可以通过Tree的dataProvider属性来设置数据源。为了实现递归绑定,可以自定义一个TreeItemRenderer,该渲染器知道如何根据XML节点的子节点创建新的TreeItems。 ```actionscript var tree:Tree = new Tree...

    flex 解析xml实例

    &lt;mx:List dataProvider="{xmlData.item}" /&gt; ``` 5. **XML表达式**:Flex支持使用XML表达式(XPath-like)来访问特定的XML节点。例如,获取第一个`item`的值: ```actionscript var firstItemValue:String = ...

    Flex中Tree组件的数据源举例(xml,array,object)

    在Flex开发中,Tree组件是一种常用的用户界面元素,用于展示层次结构的数据。它通常用于文件系统、组织...在"tree_dataProvider.mxml"文件中,你可以找到关于这个主题的具体示例代码,帮助你更好地理解和实践这些概念。

    Flex基础培训-6-拖放与过滤

    dataProvider="{employeeData}" width="300" height="400" dragEnabled="true" dropEnabled="true" dragMoveEnabled="true" allowMultipleSelection="true" &gt; ``` 在这段代码中: - `dragEnabled="true"`:...

    Flex DataGrid从XML文件中加载数据

    `users.children()` 返回一个 `XMLList`,将其转换为 `XMLListCollection` 以便在 `DataGrid` 中使用。 5. **DataGrid组件**:`&lt;mx:DataGrid&gt;` 是用来展示数据的组件。它的 `dataProvider` 属性设置为 `users....

    flex解析xml文件

    在本文中,我们将深入探讨如何使用Flex来解析XML文件,并将其内容用作ComboBox下拉列表的数据源。首先,让我们理解Flex的基本概念。Flex是Adobe开发的一种开放源代码的富互联网应用程序(RIA)框架,用于构建和部署...

    FLEX操作XML&JSON

    如`&lt;mx:DataGrid dataProvider="{xmlData..childNodeName}" /&gt;`。 4. **事件监听**:可以监听XML数据的变化,例如,当XML数据更新时触发特定操作。 【JSON操作】 1. **解析JSON**:Flex使用`flash.utils.parse...

    flex DataGrid xml 动态数据列表实例

    2. **加载XML数据**:在Flex应用中,我们可以使用`XML`类加载并解析XML文件。例如: ```actionscript var urlLoader:URLLoader = new URLLoader(); urlLoader.dataFormat = URLLoaderDataFormat.TEXT; urlLoader....

    flex xml生成tree 源码

    描述:此代码示例展示了如何在Flex应用程序中使用XML数据来动态生成一个树形结构(Tree)。Flex是Adobe Systems开发的一款开源框架,用于构建跨平台的桌面和移动设备应用。这段代码通过HTTPService组件从外部XML文件...

    Flex与JSON及XML的互操作

    接下来,我们将通过一个具体的例子来展示如何在Flex中使用XML。 ##### 创建服务器端代码 服务器端代码负责生成XML数据并将其返回给客户端。以下是一个简单的JSP文件,用于生成关于两家公司(compa和compb)的股票...

    flex Tree xml

    &lt;mx:Tree id="myTree" dataProvider="{xmlData}" labelField="@label"/&gt; ``` 这里,`xmlData`应该是一个`XMLListCollection`对象,它是从XML文档转换而来的。可以使用`XML`类和`XMLList`来解析XML: ```...

    Flex操作XML

    通过以上步骤,你可以有效地在Flex应用中使用XML数据。记住,根据项目需求,可能还需要处理错误、优化性能或者添加额外的功能,如分页、排序和过滤。总之,Flex结合XML提供了一种强大且灵活的方式来处理和展示数据,...

    flex 解析xml绑定到combobox点击按钮把combobox所选的数据添加到List

    1. **XML解析**:在Flex中,我们可以使用`mx:XML`组件或`flash.xml.XMLDocument`类来解析XML数据。XML是一种常见的数据格式,用于存储和传输结构化数据。在示例中,XML可能包含一系列可选项,这些选项将被用作...

    Flex tree的用法

    - **XMLList和XMLListCollection**: 将XML转换为XMLList或XMLListCollection,然后设置给Tree的`dataProvider`属性,这样就可以显示XML数据。 - **节点标签和子节点**: XML元素的文本可以作为节点的标签,而子元素...

    Flex Tree XML

    在Flex中,我们可以通过设置Tree组件的`dataProvider`属性来绑定XML数据。首先,我们需要加载XML文件,然后使用`XMLListCollection`将其转换为可以被Tree识别的数据结构。以下是一个简化的代码示例: ```...

    Flex读取xml文件几种方法

    在这个例子中,我们将XML文件中的`color`元素转换为了`ArrayCollection`类型,以便在Flex应用中使用。 #### 方法二:使用URLLoader读取XML文件 除了`HTTPService`外,`URLLoader`也是Flex中另一个常用的方法来读取...

Global site tag (gtag.js) - Google Analytics