#!/opt/SAM/perl/bin/perl -I/opt/SAM/perl-lib use XML::XSLT; use XML::Simple; use Data::Dumper; use SAM::Database; use strict; $| = 1; my $xml = < 1 148 DTA018 Frame slip free run (non-tracking) out-of-service limit. Meridian_Opt.11 vGcklNPVcDwjfyFSGrpCLvPwYXtMvczl.1184265392 Alpharetta Corporate EOF my $xslt = < Subject: New Alarm: \n\n Alarm: . ID = \nAlarm Match = \nDescription = \nDevice = \nLocation = \nRaised = \nMsgID = EOF my $cell_xslt = < Subject: New Alarm: \n\n Location: , Match: , Device: , Time: . EOF sub _substr { my ($Xml,$variable, $offset, $length) = @_; my $xs = new XML::Simple(); my $ref = $xs->XMLin($Xml); my @subs = split '/', $variable; return $xml unless exists $ref->{$subs[1]}; my $val = $ref->{$subs[1]}; $ref->{$subs[1]} = substr($val, $offset, $length); my $xml = "\n\n"; foreach my $element (keys %{$ref}) { $xml .= "<$element>$ref->{$element}\n"; } $xml .= "\n"; return $xml; } sub transform { my ($xslt, $xml) = @_; while($xslt =~ m/value-of\s+?select="substr\((.+?),(\d+?),(\d+?)\)"/ ) { $xml = _substr($xml,$1,$2,$3); my $value = $1; $xslt =~ s/substr\($1,$2,$3\)/$value/; } my $Xslt = XML::XSLT->new($xslt, warnings => 1, debug => 0); $Xslt->transform($xml); my $text = $Xslt->toString(); $Xslt->dispose(); return $text; } sub main { eval { my $alarm_id = undef; my $sd = SAM::Database->new(); $sd->connect($sd->get_db_name('DEMO')); my $res = $sd->prepare("select alarm_id from alarm where status_id != 100;") or die $sd->errstr(); $res->execute() or die $res->errstr(); $res->bind_columns(\$alarm_id) or die $res->errstr(); while($res->fetch()) { my %alarm = $sd->get_alarm_info($alarm_id); my $xml = "\n". "\n". "$alarm{'source_type_id'}\n". "$alarm{'alarm_id'}\n". "$alarm{'trigger_match'}\n"; if($alarm{'source_type_id'} == 1) { my $d = undef; my $res2 = $sd->prepare("select description from trigger where trigger_id=?;") or die $sd->errstr(); $res2->execute($alarm{'trigger_id'}) or die $res2->errstr(); $res2->bind_columns(\$d) or die $res2->errstr(); while($res2->fetch()) { } $xml .= "$d\n"; $xml .= "$alarm{'console.name'}\n"; } $xml .= "\n"; $xml .= "$alarm{'location.name'}\n"; $xml .= "vGcklNPVcDwjfyFSGrpCLvPwYXtMvczl.1184265392\n"; $xml .= "\n"; print transform($cell_xslt, $xml); print "\n\n"; } }; if($@) { print "ERROR: $@\n"; } return 0; } exit main; # vi: set ts=2 sw=2: #