Прежде всего, не должен ли узел "2.0" находиться на том же уровне, что и узел "1.0"? (В вашем примере узел "2.0" находится внутри узла "1.0").
Во-вторых, я не уверен, что это то, что вы ищете, но попробуйте этот пример приложения и дайте мне знать, если это поможет.
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
width="100%"
height="100%">
<mx:Script>
<![CDATA[
private function labelBuilder(item:Object, column:DataGridColumn):String {
var ref:Object = this.deriveComplexColumnData(item, column.dataField);
var label:String = "";
for (var r:String in ref) {
label += ref[r] + "; ";
}
return label;
}
private function deriveComplexColumnData(data:Object, dataField:String):Object {
var currentRef:Object = data;
var tokens:Array = dataField.split('.');
if (tokens.length > 0) {
for (var i:int = 0; i < tokens.length; i++)
currentRef = currentRef[tokens[i]];
}
return currentRef;
}
]]>
</mx:Script>
<mx:XML id="xml">
<node label="home">
<node label="1.0">
<node label="1.1">
<node label="1.1.1">
<node label="1.1.1.1"/>
<node label="1.1.1.2"/>
</node>
<node label="1.1.2"/>
<node label="1.1.3"/>
</node>
<node label="1.2"/>
<node label="1.3">
<node label="1.3.1"/>
<node label="1.3.2"/>
</node>
</node>
<node label="2.0"/>
</node>
</mx:XML>
<mx:DataGrid id="dg" width="100%" height="100%" dataProvider="{xml.node}">
<mx:columns>
<mx:DataGridColumn dataField="@label" headerText="Node1"/>
<mx:DataGridColumn dataField="node.@label" headerText="Node2"/>
<mx:DataGridColumn dataField="node.node.@label" headerText="Node3"/>
<mx:DataGridColumn dataField="node.node.node.@label" labelFunction="{ labelBuilder }" headerText="Node4"/>
</mx:columns>
</mx:DataGrid>
</mx:Application>
Обратите внимание на «dataField» в каждом DataGridColum
, каждом «узле». представляет 1 уровень глубины внутри XML.
Я также добавил метод labelBuilder
, чтобы помочь вам понять, как обрабатываются данные и как вы можете изменить способ их отображения.