Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Jul 6th, 2012  |  syntax: None  |  size: 1.46 KB  |  hits: 11  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. Passing ref to XML::XPath object to a sub in Perl doesn't work as expected
  2. use strict;
  3. use XML::XPath;
  4.  
  5. # $xml is an xml string read from file
  6. my $returnVal = mySubA($xml);
  7.  
  8. #... some more code ...
  9.  
  10. # sub definition
  11. sub mySubA {
  12.   my ($xml) = @_;
  13.   my $xp = XML::XPath->new(xml => $xml);
  14.  
  15.   my @fields = $xp->find('/elA/elB/elC')->get_nodelist;
  16.  
  17.   # foreach elC, get desired info...
  18.   foreach my $field (@fields) {
  19.     $xp = XML:XPath->new(context => $field);
  20.     my $info1 = $xp->find('/info1')->string_value;
  21.     print "nINFO1: $info1";
  22.  
  23.     my $info2 = $xp->find('/info2')->string_value;
  24.   }
  25.   # do some stuff....
  26.   return $returnVal;
  27. }
  28.        
  29. use strict;
  30. use XML::XPath;
  31.  
  32. # $xml is an xml string read from file
  33. my $xp = XML::XPath->new(xml => $xml);
  34. my $returnValA = mySubA($xp);
  35. my $returnValB = mySubB($xp);
  36.  
  37. #... some more code ...
  38.  
  39. # sub definition
  40. sub mySubA {
  41.   my ($xp) = @_;
  42.  
  43.   my @fields = $xp->find('/elA/elB/elC')->get_nodelist;
  44.  
  45.   # foreach elC, get desired info...
  46.   foreach my $field (@fields) {
  47.     $xp = XML:XPath->new(context => $field);
  48.     my $info1 = $xp->find('/info1')->string_value;
  49.     print "nINFO1: $info1";
  50.  
  51.     my $info2 = $xp->find('/info2')->string_value;
  52.   }
  53.   # do some stuff...
  54.   return $returnVal;
  55. }
  56.  
  57. sub mySubB {
  58.   my ($xp) = @_;
  59.   # do some stuff....
  60.   return $returnVal;
  61. }
  62.        
  63. /elA/elB/elC/info1
  64.        
  65. $xp = XML:XPath->new(context => $field);
  66.        
  67. foreach my $field ( @fields ) {
  68.     my $info1 = $xp->find('/info1', $field);
  69.     print "nINFO1: $info1";
  70. }