我如何从每个父节点分别获取子节点? [英] how I get child node from each parent node separately?

查看:190
本文介绍了我如何从每个父节点分别获取子节点?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一些Data Xml ..

 < main> 
< TabNavigator x =27y =11width =455height =376id =ghbackgroundColor =#A4B6E9>
< NavigatorContent width =100%height =100%label =Clientid =clientTab>< / NavigatorContent>
< TitleWindow x =521y =84width =377height =234>
< DataGrid x =0y =0width =375height =163borderVisible =trueid =details>
<栏>
< ArrayList>
< GridColumn dataField =Nameid =arrayName/>< GridColumn dataField =AddressheaderText =Address/>
< GridColumn dataField =Phone_NumberheaderText =Phone_Number/>
< / ArrayList>
< / columns>
< / DataGrid>

我使用以下代码来检索给定XML的子名称。 b

  private function urlLdr_complete(event:Event):void {
var xmlData:XML = new XML(URLLoader(event.currentTarget).data);
(var t:xmlData.children()中的XML)
{
Alert.show(t.Name);
}

但是我只得到2个孩子(TabNavigator和TitleWindow)其他孩子在每个父节点?我想每个家长分开的孩子。我怎样才能得到它?

解决方案

您需要使用递归函数来遍历树。使用trace()而不是alert():

  private function urlLdr_complete(event:Event):void 
{
var xmlData:XML = new XML(URLLoader(event.currentTarget).data);
showNodeName(xmlData);

$ b $ private函数showNodeName($ node:XML):void
{
//跟踪当前节点
trace($ node.name ));
if($ node.hasChildNodes)
{
for each(var child:XML in $ node.children())
{
//递归调用此函数每个孩子
showNodeName(child);





$ p $或者使用E4X后代()函数:

pre $ code私有函数urlLdr_complete(event:Event):void
{
var xmlData: XML = new XML(URLLoader(event.currentTarget).data);
//跟踪根节点:$ b​​ $ b trace(xmlData.name());
//并跟踪其所有后代:
(var child:xmlData.descendants()中的XML)
{
trace(child.name());






$ p $都应该产生相同的结果:$ / b



$ TabNavigator
NavigatorContent
NavigatorContent
TitleWindow
DataGrid

ArrayList
GridColumn $ b $ GridColumn
GridColumn
Button
$ / code>

我没有测试,但我期望内置的后代()函数更有效率。


I have some Data Xml..

<main>
  <TabNavigator x="27" y="11" width="455" height="376" id="gh" backgroundColor="#A4B6E9">
    <NavigatorContent width="100%" height="100%" label="Client" id="clientTab"></NavigatorContent>
    <NavigatorContent width="100%" height="100%" label="Admin" id="adminTab"></NavigatorContent></TabNavigator>
    <TitleWindow x="521" y="84" width="377" height="234">
      <DataGrid x="0" y="0" width="375" height="163" borderVisible="true" id="details">
        <columns>
          <ArrayList>
            <GridColumn dataField="Name" id="arrayName"/><GridColumn dataField="Address" headerText="Address"/>
            <GridColumn dataField="Phone_Number" headerText="Phone_Number"/>
          </ArrayList>
        </columns>
      </DataGrid>
      <Button x="139" y="167" height="28" label="Export"/>
    </TitleWindow>
</main>

I use following code for retrieving the child names of given XML..

private function urlLdr_complete(event:Event):void{
var xmlData:XML=new XML(URLLoader(event.currentTarget).data);                       
for each (var t:XML in xmlData.children()) 
{
   Alert.show(t.Name);
}

But I only get 2 children(TabNavigator and TitleWindow).How do I get the other children in each parent node? I want separate children for each parent. How can I get it?

解决方案

You need to use a recursive function to walk down the tree. Using trace() instead of alert():

private function urlLdr_complete(event:Event):void
{
    var xmlData:XML=new XML(URLLoader(event.currentTarget).data);
    showNodeName(xmlData);
}

private function showNodeName($node:XML):void
{
    // Trace the current node
    trace($node.name());
    if($node.hasChildNodes)
    {
        for each (var child:XML in $node.children())
        {
            // Recursively call this function on each child
            showNodeName(child);
        }
    }
}

Or, use the E4X descendants() function:

private function urlLdr_complete(event:Event):void
{
    var xmlData:XML=new XML(URLLoader(event.currentTarget).data);
    // Trace the root node:
    trace(xmlData.name());
    // And trace all its descendants:
    for each(var child:XML in xmlData.descendants())
    {
        trace(child.name());
    }
}

Both should produce identical outcomes:

main
TabNavigator
NavigatorContent
NavigatorContent
TitleWindow
DataGrid
columns
ArrayList
GridColumn
GridColumn
GridColumn
Button

I haven't tested but I would expect the built-in descendants() function to be more efficient.

这篇关于我如何从每个父节点分别获取子节点?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆