1

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

任意の支援をいただければ幸いです。

4

1 に答える 1

2

内側の for ループから 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;
 }
}
于 2013-09-27T18:25:24.340 に答える