2013-09-27 4 views
1

Я перекручивание через узлы XML и создать группу для каждого узла, так, например, следующие узлы:Perl цикл Еогеаспа Дилем

<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; 
     } 
    } 
} 

Любая помощь приветствуется.

ответ

2

Я считаю, что вам нужно переместить две строки кода из внутреннего цикла. Попробуйте следующее:

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; 
} 
} 
+0

Это сделало. Так просто, но пропущено. Большое спасибо. –

+0

@NickA для петель, как правило, сложны таким образом;) – Nikhil

Смежные вопросы