flex中与XML相关的问题

| 我的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>
我的datagrid中有4列。 第一列应该只获取1.0和2.0的数据。 第二列应获取数据为1.1。 第三栏为1.1.1。 第4列为1.1.1.1,依此类推。 知道我该怎么做吗?
已邀请:
首先,“ 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>
注意每个
DataGridColum
中的\“ dataField \”,每个\“ node。\”代表XML内的1个深度级别。 我还添加了一个
labelBuilder
方法,以帮助您了解数据的处理方式以及如何更改数据的呈现方式。
使用格式化程序.....
<mx:Script>
    <![CDATA[

        // Event handler to format the input.            
        private function Format():void
        {
            // The format() method returns the formatted String,
            // or an empty String if there is an error.
            var formattedVal:String = numberFormatter.format(inputVal.text);

            if (formattedVal.length==0) {
                // If there is an error, the Format.error property 
                // contains the reason.
                formattedNumber.text=numberFormatter.error;
            }

            else {
                formattedNumber.text=formattedVal;
            }
        }
    ]]>
</mx:Script>

<mx:NumberFormatter id=\"numberFormatter\"/>

<mx:Panel title=\"NumberFormatter Example\" width=\"75%\" height=\"75%\" 
        paddingTop=\"10\" paddingLeft=\"10\" paddingRight=\"10\" paddingBottom=\"10\">

    <mx:Form>
        <mx:FormItem label=\"Enter number - a letter is invalid:\">
            <mx:TextInput id=\"inputVal\" text=\"\" width=\"75%\"/>
        </mx:FormItem>

        <mx:FormItem label=\"Formatted number: \">
            <mx:TextInput id=\"formattedNumber\" editable=\"false\" width=\"75%\"/>
        </mx:FormItem>

        <mx:FormItem>
            <mx:Button label=\"Validate and Format\" click=\"Format();\"/>
        </mx:FormItem>
    </mx:Form>

</mx:Panel>
我希望这会足够好:-) 您可以从中得到一个想法并根据您的要求进行修改。
您希望根据xml中的节点级别将这些节点放入网格-级别N进入列N。您可以通过计算父级直到它为空来确定该级别:
public static function getNestLevel(node:XML):int {
    var level:int = 0;
    while (node.parent()) {
        level++;
        node = node.parent();
    }
    return level;
}
我认为,您需要为网格准备数据结构,并使用其级别将节点放置在那里。您没有对行说任何话。您是否希望每一行都像1.0 | 1.1 | 1.1.1还是不同行上的每个节点?

要回复问题请先登录注册