DataProvider, List component and XML
The below ActionScript 3.0 code is a template for pulling xml from an xml file (xml is at the bottom of the post) and loading it into Flash CS3's built in component. This is a simple and compact example to build upon.
package
{
import flash.display.*;
import flash.events.*;
import flash.net.*;
import fl.data.DataProvider;
import fl.controls.List;
public class ListTest extends MovieClip
{
private var dp:DataProvider;
private var oList:List;
private var loadXML:XML = new XML();
public function ListTest()
{
do_xml_data_import();
}
public function do_xml_data_import()
{
var requestURI:URLRequest = new URLRequest("ListTest.xml");
var xmlLoader1:URLLoader = new URLLoader();
xmlLoader1.addEventListener(Event.COMPLETE, xml_loaded_parse_all_xml);
xmlLoader1.addEventListener(IOErrorEvent.IO_ERROR, xmlLoadError);
xmlLoader1.addEventListener(SecurityErrorEvent.SECURITY_ERROR, handleSecurityError);
xmlLoader1.load(requestURI)
}
function xml_loaded_parse_all_xml(e:Event):void
{
var holdXml:XML = new XML(e.target.data);
loadXML = XML(holdXml.xml_parse.(@databundle=="forTest"));
display_list();
}
function display_list():void
{
var numRows:int;
var i:int;
var from_xml;
var holdId;
var holdName;
dp = new DataProvider();
oList = new List();
//idMatch 1,2,3 in xml
from_xml = loadXML.xml_internal.(@idMatch==1);
//from_xml = loadXML.xml_internal.(@idMatch==2);
//from_xml = loadXML.xml_internal.(@idMatch==3);
numRows = from_xml.child("*").length();
if (numRows > 0)
{
//get data from query (held in xml)
for (i = 0; i < numRows; i++)
{
holdId = String(from_xml.xml_row[i].xml_column[0]);
holdName = String(from_xml.xml_row[i].xml_column[1]);
dp.addItem({label:holdName, data:holdId});
}
oList.setSize(40,300);
oList.dataProvider = dp;
oList.width = 280;
oList.x = 10;
oList.y = 10;
addChild(oList);
oList.addEventListener(MouseEvent.MOUSE_OVER, traceMO);
oList.addEventListener(Event.CHANGE, show_attack_button_and_confirmation);
}
else
{
trace ( "no data found");
}
}
public function traceMO(e:MouseEvent):void
{
trace("e.target " + e.target);
trace("e.target.parent " + e.target.parent);
trace("e.currentTarget " + e.currentTarget);
trace("e.currentTarget.parent " + e.currentTarget.parent);
trace("e.target.numChildren " + e.currentTarget.numChildren);
trace("e.currentTarget.numChildren " + e.currentTarget.numChildren);
}
private function show_attack_button_and_confirmation(e:Event):void
{
trace("label is " + e.target.selectedItem.label);
trace("data is " + e.target.selectedItem.data);
}
function xmlLoadError(e:IOErrorEvent)
{
trace("Unable to connect to Data source. \n" + e.text);
}
function handleSecurityError(e:SecurityErrorEvent )
{
trace("SecurityErrorEvent: " + e.text);
}
}
}
/* below is some text xml...*/
<xml_data>
<xml_parse databundle="forTest">
<xml_internal idMatch="1">
<xml_row>
<xml_column>111</xml_column>
<xml_column>Some Name</xml_column>
</xml_row>
<xml_row>
<xml_column>222</xml_column>
<xml_column>ABC Name</xml_column>
</xml_row>
<xml_row>
<xml_column>333</xml_column>
<xml_column>XYZ Name</xml_column>
</xml_row>
<xml_row>
<xml_column>444</xml_column>
<xml_column>Big Name</xml_column>
</xml_row>
<xml_row>
<xml_column>555</xml_column>
<xml_column>Little Name</xml_column>
</xml_row>
<xml_row>
<xml_column>666</xml_column>
<xml_column>Tall Name</xml_column>
</xml_row>
</xml_internal>
<xml_internal idMatch="2">
<xml_row>
<xml_column>480</xml_column>
<xml_column>Orange Name</xml_column>
</xml_row>
<xml_row>
<xml_column>481</xml_column>
<xml_column>Yellow Name</xml_column>
</xml_row>
<xml_row>
<xml_column>482</xml_column>
<xml_column>Blue Name</xml_column>
</xml_row>
</xml_internal>
<xml_internal idMatch="3">
<xml_row>
<xml_column>470</xml_column>
<xml_column>Maple Name</xml_column>
</xml_row>
<xml_row>
<xml_column>471</xml_column>
<xml_column>Oak Name</xml_column>
</xml_row>
<xml_row>
<xml_column>472</xml_column>
<xml_column>Poplar Name</xml_column>
</xml_row>
</xml_internal>
</xml_parse>
</xml_data>
Copyright Gary Rosenzweig
