Copy link to clipboard
Copied
I cant sem to figure out how to filter my XML data before entering my data grid. I want to load only the XML data with the ID attribute "BALUSTER" and have tried entering:
data_grid.dataProvider = dp.(@ID == "BALUSTER");
into my xmlLoaded function without any success. I am fairly new to as3 and could definitely use the help. Thanks.
var dpataProvider;
var products_xml:XML;
var xmlReq:URLRequest = new URLRequest("data/products.xml");
var xml_loader:URLLoader = new URLLoader();
function xmlLoaded(event:Event):void {
var ldr:URLLoader = event.currentTarget as URLLoader;
var xmlDP:XML = new XML(ldr.data);
dp = new DataProvider(xmlDP);
data_grid.dataProvider = dp;
}
xml_loader.load(xmlReq);
xml_loader.addEventListener(Event.COMPLETE, xmlLoaded);
1 Correct answer

Assign the filtered data (not the original) to the data provider:
function xmlLoaded(event:Event):void {
var ldr:URLLoader = event.currentTarget as URLLoader;
var xmlDP:XML = new XML(ldr.data);
var data:XML = <PRODUCTS/>;
data.setChildren(xmlDP.PRODUCTS.(@ID == "BALUSTER"));
dp = new DataProvider(data);
data_grid.dataProvider = dp;
}

Copy link to clipboard
Copied
Hard to say without seeing your xml, but something along these lines might work for you:
import fl.data.DataProvider;
var rawXml:XML =
<xml>
<item ID="BALUSTER">
<moniker>bubba</moniker>
<age>50</age>
</item>
<item ID="BALUSTER">
<moniker>bobby-sue</moniker>
<age>13</age>
</item>
<item ID="BULLUSTER">
<moniker>boo</moniker>
<age>25</age>
</item>
</xml>;
// use a second XML object to hold the selected nodes
var data:XML = <data/>;
data.setChildren(rawXml.item.(@ID == "BALUSTER"));
var dp:DataProvider = new DataProvider(data);
data_grid.dataProvider = dp;
Copy link to clipboard
Copied
My xml data is on an external file, hence:
var xmlReq:URLRequest = new URLRequest("data/products.xml");
var xml_loader:URLLoader = new URLLoader();
My xml data is written:
<PRODUCTS ID="BALUSTER" TYPE="3-5/8" System" PART="HBAL 600-20" WIDTH="2-1/4"" HEIGHT="20"" REMARKS="*custom lengths available"/>
<PRODUCTS ID="BALUSTER" TYPE="3-5/8" System" PART="HBAL 600-24" WIDTH="2-1/4"" HEIGHT="24"" REMARKS="*custom lengths available"/>
I want to load only the products with the "id" == "baluster" into the data grid. If I were to load it into text field, I know I can use something like:
myText_txt.text = xmlDP.PRODUCTS.(@ID=="BALUSTER").parent();
but I cant figure out how to load this into a Data Grid instead.

Copy link to clipboard
Copied
... then this should work:
function xmlLoaded(event:Event):void {
var ldr:URLLoader = event.currentTarget as URLLoader;
var xmlDP:XML = new XML(ldr.data);
var data:XML = <data/>;
data.setChildren(xmlDP.PRODUCTS.(@ID == "BALUSTER"));
dp = new DataProvider(data);
data_grid.dataProvider = dp;
}
Copy link to clipboard
Copied
So if my XML data is similar to this . . .
<PRODUCTS>
<PRODUCTS ID="BALUSTER" TYPE="3-5/8" System" PART="HBAL 600-20"/>
<PRODUCTS ID="BALUSTER" TYPE="3-5/8" System" PART="HBAL 600-24"/>
<PRODUCTS ID="BRACKETS" TYPE="3-1/4" to 3-5/8" System" PART="HTR 232"/>
</PRODUCTS>
I tried this . . .
function xmlLoaded(event:Event):void {
var ldr:URLLoader = event.currentTarget as URLLoader;
var xmlDP:XML = new XML(ldr.data);
var data:XML = <PRODUCTS/>;
data.setChildren(xmlDP.PRODUCTS.(@ID == "BALUSTER"));
dp = new DataProvider(xmlDP);
data_grid.dataProvider = dp;
}
. . . but its still not filtering only "BALUSTER" products.

Copy link to clipboard
Copied
Assign the filtered data (not the original) to the data provider:
function xmlLoaded(event:Event):void {
var ldr:URLLoader = event.currentTarget as URLLoader;
var xmlDP:XML = new XML(ldr.data);
var data:XML = <PRODUCTS/>;
data.setChildren(xmlDP.PRODUCTS.(@ID == "BALUSTER"));
dp = new DataProvider(data);
data_grid.dataProvider = dp;
}
Copy link to clipboard
Copied
It worked! Thanks, been struggling for a few days on this!

Copy link to clipboard
Copied
You're welcome.

