Apache flex xml作为flex图表的数据源

Apache flex xml作为flex图表的数据源,apache-flex,flex4,flex3,Apache Flex,Flex4,Flex3,这是MXML代码 <?xml version="1.0"?> <!-- charts/XMLFileDataProvider.mxml --> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" > <mx:Model id="results" source="data.xml"/> <mx:Panel title="Line Chart"> <mx:LineCha

这是MXML代码

<?xml version="1.0"?>
<!-- charts/XMLFileDataProvider.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" >
<mx:Model id="results" source="data.xml"/>
<mx:Panel title="Line Chart">
 <mx:LineChart id="myChart" dataProvider="{results.result}" showDataTips="true" width="600" height="240">
    <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:Legend dataProvider="{myChart}"/>     
 </mx:Panel>
</mx:Application>

当我更改xml文件中的数据时,这些更改不会反映在图表中。有人能告诉我哪里出了问题吗

这是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>

   </data>

81768
60310
43357
81156
58883
49280

这可能会对您有所帮助,我已经创建了有关HTTPService的示例:-

您可以根据上述注释为您的问题实现逻辑

    <?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
               creationComplete="init();switchImage()">
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
        <!--<fx:Model id="results" />-->
        <s:HTTPService id="results" result="resultHandler(event)" fault="{trace('Fault')}" />
    </fx:Declarations>
    <fx:Script>
        <![CDATA[

            import mx.rpc.events.ResultEvent;

            private function init():void
            {
                var timer:Timer = new Timer(2000);
                timer.addEventListener(TimerEvent.TIMER, switchImage);
                timer.start();
            }
            private function switchImage(event:TimerEvent = null):void
            {
                //url as external URL outside of project folder
                results.url = "C:/data/data.xml";
                results.send();
            }

            private function resultHandler(event:ResultEvent):void
            {
                myChart.dataProvider = null;
                myChart.dataProvider = event.result.data.result;
            } 
        ]]>
    </fx:Script>
    <mx:Panel title="Line Chart">
        <mx:LineChart id="myChart" showDataTips="true" width="600" height="240">
            <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:Legend dataProvider="{myChart}"/>     
    </mx:Panel>
</s:Application>


它不会刷新,因为您仅在图表应用程序的初始加载时获取数据。如果您想让它加载数据的每次更改(即XML),那么每次都必须从XML调用/获取数据。要做到这一点,您可以在应用程序中创建一个计时器,它将在一段时间间隔后反复加载此数据。您可以在XML中创建一个属性,它将显示XML的变化(如随机数),创建一个变量并捕获它。如果未将XML数据分配给图表数据提供程序,请检查捕获编号是否与上一个相同。在results.url中,我放置了XML文件的位置,但仍然无法看到绘图将XML保留在“项目外部”,例如在桌面上,然后重试。它将工作在C:data/data.xml和results.url=“C:/data/data.xml”中,但仍然无法看到图形上的任何内容。我可以通过放置results.url=“C:/data/data.xml”来执行它;我编辑了一些代码。现在您可以签入折线图id了。您不认为需要指定数据源吗