<?xml version="1.0" encoding="utf-8"?>
<!-- http://blog.flexexamples.com/2008/11/05/setting-a-datagrid-controls-data-provider-to-an-xml-object-in-flex/ -->
<mx:Application name="DataGrid_dataProvider_XML_test2"
        xmlns:mx="http://www.adobe.com/2006/mxml"
        layout="vertical"
        verticalAlign="middle"
        backgroundColor="white"
        initialize="init();">

    <mx:XML id="xmlDP" source="data/log.xml" />

    <mx:Script>
        <![CDATA[
            import mx.controls.DataGrid;
            import mx.controls.dataGridClasses.DataGridColumn;
            import mx.core.ScrollPolicy;
            import mx.utils.ObjectUtil;

            private var dataGrid:DataGrid;
            private var dataGridCol1:DataGridColumn;
            private var dataGridCol2:DataGridColumn;
            private var dataGridCol3:DataGridColumn;

            private function init():void {
                dataGridCol1 = new DataGridColumn();
                dataGridCol1.headerText = "Name";
                dataGridCol1.labelFunction = labelFunc;
                dataGridCol1.sortCompareFunction = nameSortCompareFunc;
                dataGridCol1.width = 80;

                dataGridCol2 = new DataGridColumn("@type");
                dataGridCol2.headerText = "Type";
                dataGridCol2.sortCompareFunction = typeSortCompareFunc;
                dataGridCol2.width = 50;

                dataGridCol3 = new DataGridColumn("@message");
                dataGridCol3.headerText = "Message";
                dataGridCol3.width = 200;

                dataGrid = new DataGrid();
                dataGrid.columns = [dataGridCol1, dataGridCol2, dataGridCol3];
                dataGrid.dataProvider = xmlDP.children();
                dataGrid.verticalScrollPolicy = ScrollPolicy.ON;
                addChild(dataGrid);
            }

            private function labelFunc(item:XML, col:DataGridColumn):String {
                return item.name();
            }

            private function nameSortCompareFunc(itemA:XML, itemB:XML):int {
                return ObjectUtil.stringCompare(dataGridCol1.itemToLabel(itemA), dataGridCol1.itemToLabel(itemB), true);
            }

            private function typeSortCompareFunc(itemA:XML, itemB:XML):int {
                return ObjectUtil.numericCompare(itemA.@type, itemB.@type);
            }
        ]]>
    </mx:Script>

</mx:Application>