To allow the grouping and summary rows in DataGrid, I decided to convert existing report (old fashion DataGrid) to AdvancedDataGrid, which is a new feature of Flex 3. And which is turned out that raw XML I receive from backend returns an error. I needed more control of the data. As a part of the fix I wrote the conversion function which returns associated array collection based on input xml. Enjoy:
- private function xml2array(xml:XMLDocument):ArrayCollection {
- var ac:ArrayCollection = new ArrayCollection();
- var xmlNodes:ArrayCollection = new ArrayCollection(xml.childNodes);
- for (var i:int = 0; i < xmlNodes.length; i++) {
- var thisRecord:Dictionary = new Dictionary();
- var rowObj:Object = xmlNodes[i].childNodes;
- for (var j:int = 0; j < rowObj.length; j++) {
- var thisNodeName:String = rowObj[j].localName;
- var thisNodeValue:String = ”;
- if (rowObj[j].childNodes && rowObj[j].childNodes.length > 0) {
- if (rowObj[j].childNodes[0].nodeValue)
- thisNodeValue = rowObj[j].childNodes[0].nodeValue;
- else
- thisNodeValue = ”;
- }
- thisRecord[thisNodeName] = thisNodeValue;
- }
- ac.addItem(thisRecord);
- }
- return ac;
- }