【问题标题】:Perl foreach loop dilemaPerl foreach 循环困境
【发布时间】:2013-10-04 03:28:57
【问题描述】:

我正在遍历 XML 节点并为每个相似节点创建一个组,例如以下节点:

<node name="ps1_uat1" host="" port="20014" />
<node name="ps1_uat2" host="" port="20014" />
<node name="ps1_uat3" host="" port="20014" />

...将生成以下组:

<nodeGroup name="ps1" nodes="" />

那里一切都很好,但是当使用下面的代码循环时,我迷失在我的循环中并打印出来:

<nodeGroup name="ps1" nodes="ps1_it," />
<nodeGroup name="ps1" nodes="ps1_it, ps1_uat1," />
<nodeGroup name="ps1" nodes="ps1_it, ps1_uat1, ps1_uat2," />
<nodeGroup name="ps1" nodes="ps1_it, ps1_uat1, ps1_uat2, ps1_uat3," />

我只希望它打印出最后一个,我正在尝试收集所有相似的节点,并将它们推送到@nodes 数组中,然后将其打印到节点属性中。

我的 Perl 代码:

foreach my $group (@groups) {
    my @nodes;
    foreach my $node (@nodenames) {
        chomp($group);
        chomp($node);
        if ($node =~ m/$group/) {
            push (@nodes, "$node,");
            my $groupxml = "\t<nodeGroup name=\"$group\" nodes=\"@nodes\" \/>\n";
            print ODSERVERFILE $groupxml;
        }
    }
}

感谢任何帮助。

【问题讨论】:

    标签: xml perl loops foreach


    【解决方案1】:

    我相信您需要将两行代码移出内部 for 循环。试试这个:

    foreach my $group (@groups) {
    my @nodes;
     foreach my $node (@nodenames) {
    
        chomp($group);
        chomp($node);
    
        if ($node =~ m/$group/) {
           push (@nodes, "$node,");
        }
     }
     // These 2 lines go out
     my $groupxml = "\t<nodeGroup name=\"$group\" nodes=\"@nodes\" \/>\n";
     print ODSERVERFILE $groupxml;
     }
    }
    

    【讨论】:

    • 做到了。如此简单,却又错过了。非常感谢。
    猜你喜欢
    • 2016-05-21
    • 2011-10-20
    • 2012-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    相关资源
    最近更新 更多