2011-03-13 25 views
0

我想顯示XML從Oracle數據庫作爲圖表導出......如何在Flex中將XML設置爲dataProvider?

的XML有以下結構:

<ROWSET> 
    <ROW> 
     <ORDER_ITEMS_ID>1</ORDER_ITEMS_ID> 
     <ORDER_ID>1</ORDER_ID> 
     <PRODUCT_ID>1</PRODUCT_ID> 
     <UNIT_PRICE>1200</UNIT_PRICE> 
     <QUANTITY>1</QUANTITY> 
    </ROW> 
    <ROW> 
     <ORDER_ITEMS_ID>2</ORDER_ITEMS_ID> 
     <ORDER_ID>7</ORDER_ID> 
     <PRODUCT_ID>1</PRODUCT_ID> 
     <UNIT_PRICE>1100</UNIT_PRICE> 
     <QUANTITY>3</QUANTITY> 
    </ROW> 

我看到使用許多圖表的例子ArrayCollection作爲DataProvider。使用相同的方式,我試圖設置XML。但沒有結果。

你能告訴我如何設置一個XML作爲dataprovider? (或XMLList或XMLlist集合) (我正在開發AIR中的一個小應用程序)

+0

您可以分享您用於製作xml數據提供程序的代碼嗎? – Neeraj 2011-03-13 18:09:40

回答

2

我不知道你的意思是你的圖表看起來如何,但這裏是XMLList提供者的基於元素的值和基於屬性值的簡單示例

<?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="application1_creationCompleteHandler(event)" 
       > 
    <fx:Declarations> 
     <!-- Place non-visual elements (e.g., services, value objects) here --> 
    </fx:Declarations> 

    <fx:Script> 
     <![CDATA[ 
      import mx.binding.utils.BindingUtils; 
      import mx.collections.XMLListCollection; 
      import mx.events.FlexEvent; 
      private var xml1:XML = <ROWSET> 
             <ROW> 
              <ORDER_ITEMS_ID>1</ORDER_ITEMS_ID> 
              <ORDER_ID>1</ORDER_ID> 
              <PRODUCT_ID>1</PRODUCT_ID> 
              <UNIT_PRICE>1200</UNIT_PRICE> 
              <QUANTITY>1</QUANTITY> 
             </ROW> 
             <ROW> 
              <ORDER_ITEMS_ID>2</ORDER_ITEMS_ID> 
              <ORDER_ID>7</ORDER_ID> 
              <PRODUCT_ID>1</PRODUCT_ID> 
              <UNIT_PRICE>1100</UNIT_PRICE> 
              <QUANTITY>3</QUANTITY> 
             </ROW> 
           </ROWSET>; 

      private var xml2:XML = <ROWSET> 
              <ROW ORDER_ITEMS_ID="1" 
               ORDER_ID="1" 
               PRODUCT_ID="1" 
               UNIT_PRICE="1200" 
               QUANTITY="1" 
              /> 
              <ROW ORDER_ITEMS_ID="2" 
               ORDER_ID="7" 
               PRODUCT_ID="1" 
               UNIT_PRICE="1100" 
               QUANTITY="3" 
              /> 

            </ROWSET>; 

      [Bindable] 
      private var xmlList1:XMLList; 
      [Bindable] 
      private var xmlList2:XMLList; 


      protected function application1_creationCompleteHandler(event:FlexEvent):void 
      { 
       xmlList1 = xml1.ROW; 
       xmlList2 = xml2.ROW; 
      } 

     ]]> 
    </fx:Script> 


    <s:VGroup> 
     <mx:ColumnChart id="chart1" dataProvider="{xmlList1}" showDataTips="true"> 
      <mx:series> 
       <mx:ColumnSeries 
        yField="ORDER_ITEMS_ID" 
        /> 
       <mx:ColumnSeries 
        yField="ORDER_ID" 
        /> 
       <mx:ColumnSeries 
        yField="PRODUCT_ID" 
        /> 
       <mx:ColumnSeries 
        yField="UNIT_PRICE" 
        /> 
       <mx:ColumnSeries 
        yField="QUANTITY" 
        />    
      </mx:series> 
     </mx:ColumnChart> 

     <mx:ColumnChart id="chart2" dataProvider="{xmlList2}" showDataTips="true"> 
      <mx:series> 
       <mx:ColumnSeries 
        yField="@ORDER_ITEMS_ID" 
        /> 
       <mx:ColumnSeries 
        yField="@ORDER_ID" 
        /> 
       <mx:ColumnSeries 
        yField="@PRODUCT_ID" 
        /> 
       <mx:ColumnSeries 
        yField="@UNIT_PRICE" 
        /> 
       <mx:ColumnSeries 
        yField="@QUANTITY" 
        /> 
      </mx:series> 
     </mx:ColumnChart>  
    </s:VGroup> 
</s:Application> 
0

,如果你想使用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> 

你可以做到這一點

<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="myChart" dataProvider="{results.result}" showDataTips="true"> 
    <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}"/>  

也可以使用PHP或任何其他類型的服務器端編碼的從任何數據取回後呈現數據作爲XML base.In這種情況下使用的mx源:型號爲

源= 「HTTP://localhost/yourproj/data.php」

0
[Bindable] private var PIE_XML:XML= <RowSet> 
               <row> 
                <category>red</category> 
                <other_data>50</other_data> 
               </row> 
               <row> 
                <category>blue</category> 
                <other_data>20</other_data> 
               </row> 
               <row> 
                <category>green</category> 
                <other_data>30</other_data> 
               </row> 
               <row> 
                <category>gold</category> 
                <other_data>30</other_data> 
               </row> 
              </RowSet>; 

私有函數的init():無效 {

  var newItem:Object; 
      for(var i:int=0;i<PIE_XML.row.length();i++) 
      { 
       newItem=new Object(); 
       newItem.label=PIE_XML.row[i].category; 
       newItem.data=PIE_XML.row[i].other_data; 

       _pieChart.addItem(newItem); 
      } 

}

從上面的代碼,我們可以將XML轉換爲數組集合那麼我們可以用陣列到圖表的數據提供者。提供的解決方案的一半是http://digitaladwords.com/

相關問題