I have successfully read an xml file, gotten some info and stored it in a variable. Then I used the information in the variable to system grep another xml file, and store that in a variable.
I want to use XPATH to get some info from that second XML, but can't. It gives the following errors:
Use of uninitialized value in subroutine entry at /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi/XML/Parser/Expat.pm line 474.
and ..
no element found at line 1, column 0, byte -1:
28^
7157840
at /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi/XML/Parser.pm line 187
Here is the code:
#!/usr/bin/perl -w
use strict;
use warnings;
use XML::XPath;
use MIME::Lite::TT;
use File::Copy;
use File::Find;
use File::Grep qw( fgrep fmap fdo );
my $file = '/home/jramirez/20120811_XML_Reader_837/test.xml';
my $xp = XML::XPath->new(filename => $file);
my $icncount = 1;
my $transactioncount = 0;
my $billedamount = 0;
my $PayerName3 = '';
my $ICN = '';
my $BillingProvider = '';
my $line = '';
my $cmd = '';
my $Name = '';
my $xmlpath = '';
my $xmlname = '';
print $file . "\n";
print $xp . "\n";
foreach my $InterchangeControlHeader ($xp->find('//InterchangeControlH
+eader')->get_nodelist){
my $InterchangeControlNumber13 = $InterchangeControlHeader->find('
+@InterchangeControlNumber13')->string_value;
$ICN = $InterchangeControlNumber13
}
foreach my $Transaction837P ($xp->find('//Transaction837P')->get_nodel
+ist){
my $BillingProviderIdentifier9 = $Transaction837P->find('BillingPr
+oviderHierarchicalLevelLoop/BillingProviderNameLoop/BillingProviderNa
+me/@BillingProviderIdentifier9')->string_value;
$BillingProvider = $BillingProviderIdentifier9;
$PayerName3 = $Transaction837P->find('SubscriberHierarchicalLevelL
+oop/PayerNameLoop/PayerName/@PayerName3')->string_value;
$transactioncount++;
}
foreach my $ServiceLineNumberLoop ($xp->find('//ServiceLineNumberLoop'
+)->get_nodelist){
my $AssignedNumberLine = $ServiceLineNumberLoop->find('Service
+LineNumber/@AssignedNumber1')->string_value;
my $LineItemChargeAmount2 = $ServiceLineNumberLoop->find('Prof
+essionalService/@LineItemChargeAmount2')->string_value;
if ($LineItemChargeAmount2 eq '') {
$LineItemChargeAmount2 = 0;
}
$billedamount += $LineItemChargeAmount2;
}
print 'Billing Provider: ' . $BillingProvider . "\n";
print 'ICN: ' . $ICN . "\n";
print 'Payer: ' . $PayerName3 . "\n";
print 'Total Number Invoices: ' . $transactioncount . "\n";
print 'Total Billed: ' . $billedamount . "\n";
my $SESXML = `find /home/jramirez/PayerDownload/SES/backup/*xml -maxde
+pth 1 -type f -exec grep -q $ICN '{}' ';' -exec echo '{}' ';' `;
chomp $SESXML;
my $sesxp = XML::XPath->new(filename => $SESXML);
foreach my $interchange ($sesxp->find('//Interchange')->get_nodelist){
$Name = $interchange->find('Accept/@Name')->string_value;
print $Name . "\n";
print "I think we got 'em, but we dont!" . "\n";
}
The objective is to read the first xml, gather unique identifiers that help me find the second xml. Once the second xml is found, i want to XPATH the info I need from it into variables. Then I'll use the variables to generate a simple txt report.
I printed out the $xp and $sesxp variables and noted that they have the same value, and guess I should clear that? can't find how to, must be googling the wrong terms.
I humbly ask for help.