in reply to Re: need help with for loop within an xml
in thread need help with for loop within an xml

Thanks very much for your reply. I understood this loop
for my $n (1..$num){ my $ip = $server->{'CoreLanIP_'.$n.'__1'}; if ($ip eq $br_ip){ my $mask = $server->{'CoreLanNetmask_'.$n};

which did solve one of my problem of searching all the values as per 'corelannum'

As of now
foreach my $n (1..$num){ my $corebrip = $server->{'CoreLanIP_'.$n.'__1'} ; my $brmask = $server->{'CoreLanNetmask_'.$n} ."\n"; if ($corebrip eq $br_ip){ print join ("/", $br_ip, $brmask);
I get the below output
192.169.73.1/255.255.255.0 192.169.73.1/255.255.255.0 192.169.73.2/255.255.255.0 192.169.73.2/255.255.255.0 192.169.73.3/255.255.255.0 192.169.73.3/255.255.255.0 192.169.73.4/255.255.255.0 192.169.73.4/255.255.255.0 192.169.73.5/255.255.255.0 192.169.73.5/255.255.255.0 192.169.73.6/255.255.255.0 192.169.73.6/255.255.255.0
so it is searching the complete xml at once as the data I have posted is only one block...so How can I make the script to search block by block?

For each block it should search for all these variables and perform as I say then move to next block as I guess that would simplify things?

like for each block I will have different br_ip, CoreLanIP_'.$n.'__1' and  CoreLanNetmask_'.$n

So for each block it should search corelanip and if it matches br_ip then use the equivalent corelannetmask

Replies are listed 'Best First'.
Re^3: need help with for loop within an xml
by poj (Abbot) on Sep 15, 2015 at 07:43 UTC
    for each block I will have different br_ip

    I don't understand what you mean, your output has different br_ips. Un-comment this to see each block being searched

     #print "Searching for $br_ip\n";
    poj
      Yeah sorry my bad I just verified with different with different subnet values and it IS picking the correct values.

      Can you please help me understand the modification you made to XML:Simple

      as below
      my $xml = do {local $/='';'file.xml'} ; #my $servers = XMLin('file.xml'); my $servers = XMLin($xml, ForceArray => 1);
      What does this do?
        my $xml = do {local $/='';<DATA>} ; reads the lines following __DATA__ into a string.
        Since your XML is in a separate file use my $servers = XMLin('file.xml',ForceArray => 1); and remove the __DATA__ line and all the lines following.

        ForceArray=1 ensures $servers->{server} is an arrayref even if there is only one server block in the file.

        See OPTIONS in XML::Simple
        poj