Hi monks,
I need some guidance in my program.
I have created a web application tool using XML::XSLT, XML::Smiple and XML::Parser and creating XML out file is working fine but there is a delay in writing the file can any one give me some best idea to rectify it.
Thanks in advance.
Program to create XML files.
#!/perl/bin/perl
print "Content-type:text/html\n\n";
use CGI qw(:standard);
use strict;
use warnings;
use XML::Simple;
use XML::XSLT;
use Data::Dumper;
use Data::FormValidator;
use Data::FormValidator::Constraints qw(email);
use Net::SMTP;
my $tech = {
'Linux' => 'linux@domain.com',
'Unix' => 'unix@domain.com',
'Windows XP' => 'windows@domain.com',
};
# ----------------- Sub routines -----------------
sub showfun1
{
my $xml->{items} = { item => [ sort keys %{$tech} ] };
$xml->{rootname} = 'data';
$xml->{nextpage} = 'frmform';
return $xml;
}
sub write_xml
{
my ($ref, $fn) = @_;
my $root_name = $ref->{rootname};
my $xmld = new XML::Simple( rootname => $root_name, noattr => 1 );
my $data = $xmld->XMLout( $ref );
open(OUT , ">$fn") or die $!;
print OUT "$data";
close (OUT);
}
sub showfun2
{
my ($name) = @_;
my $xml = showfun1();
$xml->{name} = param("$name");
$xml->{mail} = $tech->{$xml->{name}};
$xml->{nextpage} = 'frmconfirm';
return $xml;
}
sub showfun3
{
my $xml = showfun2("tt");
# Input
my $input;
$input->{"$_"} = param("$_") foreach ( param() );
# Profile
my $profile = {
required=> [qw(sendermail mob username designation)],
constraint_methods => {
sendermail => email(),
username => qr/^([A-Z|a-z]{6,15})$/,
mob => qr/^([0-9]{10})$/,
},
};
# Validation
my ($valids, $missings, $invalids, $unknowns) = Data::FormValidato
+r->validate($input, $profile);
print "Missing :", scalar(@$missings)."<br />";
print "Invalid :", scalar(@$invalids)."<br />";
if ( (scalar(@$missings)) ) {
$xml->{missing} = $missings;
}
if ( (scalar(@$invalids)) ) {
$xml->{invalid} = $invalids;
}
if ( (scalar(@$missings)) ==0 && (scalar(@$invalids)) == 0){
my $server='IP';
my ($mailfrom, my $mailto ) = @_;
my $subject = 'Test mail from perl program';
my $message = 'Hi this is a test mail which is generated by pe
+rl program';
my $smtp = Net::SMTP->new($server, Timeout => 15, Debug => 1);
$smtp->mail ( $mailfrom );
$smtp->to ( $mailto );
$smtp->data(); # Start the mail
# headers
$smtp->datasend ("From: $mailfrom\n");
$smtp->datasend ("To: $mailto\n");
$smtp->datasend ("Subject: $subject\n");
$smtp->datasend ("\n");
# body.
$smtp->datasend ("$message\n\n");
my $ss=$smtp->dataend(); # Send the termination string
# Construct final XML
if($ss != 0)
{
$xml->{uname} = param('username');
}
if($ss == 0)
{
$xml->{errorcode} = '530 5.7.1 Client was not authenticat
+ed';
}
$xml->{rootname} = 'confirm';
}
return $xml;
}
# ----------------- Main Programme -----------------
# Var Declarations
my $fname = param('nextpage');
my $ret;
my $xml_file = "abc.xml";
my $xsl_file = "abc.xsl";
# Validation
if ( $fname eq 'frmform' ) {
$ret = showfun2("selopt");
} elsif ( $fname eq 'frmconfirm' ) {
$ret = showfun3();
}else {
$ret = showfun1();
}
# Writing into XML
write_xml($ret,"$xml_file");
# Convertion from XML to HTML
my $p = XML::XSLT->new ($xsl_file, "FILE");
$p->transform_document ($xml_file, "FILE");
$p->print_result();
XSLT code
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" versi
+on="1.0">
<xsl:output method="html" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<link rel="stylesheet" href="css1.css" media="screen,projection" t
+ype="text/css" />
<form name="frm" method="post" >
<xsl:if test="/data">
<h1><font color='black'><center>Login Page - Forum</center
+></font></h1>
<table align="center" width='21%'>
<tr>
<td> Technology Category </td>
<td>
<select name="selopt" onchange="document.frm.s
+ubmit();" style="width: 168px;">
<option>Select </option>
<xsl:for-each select="/data/items/item">
<option>
<xsl:if test="/data/name = . ">
<xsl:attribute name="selected">
selected
</xsl:attribute>
+
</xsl:if>
<xsl:value-of select="."/>
</option>
</xsl:for-each>
</select>
</td>
</tr>
</table>
</xsl:if>
<xsl:if test="/data/name">
<table align='center' >
<tr >
<td> Selected Category </td>
<td>
<input type="hidden" name="tt1" disabled="true
+" size='25'>
<xsl:attribute name="value">
<xsl:value-of select="/data/name"/>
</xsl:attribute>
</input>
<input type="text" name="tt" size='25'>
<xsl:attribute name="value">
<xsl:value-of select="/data/name"/>
</xsl:attribute>
</input>
<input type="hidden" name="mailid">
<xsl:attribute name="value">
<xsl:value-of select="/data/mail"/>
</xsl:attribute>
</input>
<input type="hidden" name="tech">
<xsl:attribute name="value">
<xsl:value-of select="/data/name"/>
</xsl:attribute>
</input>
<input type="hidden" name="selopt">
<xsl:attribute name="value">
<xsl:value-of select="/data/name"/>
</xsl:attribute>
</input>
</td>
</tr>
<tr >
<td> Name </td>
<td>
<input type="text" name="username" value="
+" size='25'></input>
<xsl:for-each select="/data/missing">
<xsl:if test=". ='username'">
<span id="un"><font color="red"><i
+>Username is Missing</i></font></span>
</xsl:if>
</xsl:for-each>
<xsl:for-each select="/data/invalid">
<xsl:if test=". ='username'">
<span id="un"><font color="red"><i>Use
+rname is Invalid</i></font></span>
</xsl:if>
</xsl:for-each>
</td>
</tr>
<tr >
<td> Extn/Mob No </td>
<td>
<input type="text" name="mob" size='25'></inpu
+t>
<xsl:for-each select="/data/missing">
<xsl:if test=". ='mob'">
<span id="mo"><font color="red"><i
+>Mobile No is Missing</i></font></span>
</xsl:if>
</xsl:for-each>
<xsl:for-each select="/data/invalid">
<xsl:if test=". ='mob'">
<span id="mo"><font color="red"><i>M
+obile No is Invalid</i></font></span>
</xsl:if>
</xsl:for-each>
</td>
</tr>
<tr >
<td> E-mail </td>
<td>
<input type="text" name="sendermail" size
+='25'></input>
<xsl:for-each select="/data/missing">
<xsl:if test=". ='sendermail'">
<span id="em"><font color="red"><i>M
+ail-id is Missing</i></font></span>
</xsl:if>
</xsl:for-each>
<xsl:for-each select="/data/invalid">
<xsl:if test=". ='sendermail'">
<span id="em"><font color="red"><i>Mai
+l-id is Invalid</i></font></span>
</xsl:if>
</xsl:for-each>
</td>
</tr>
<tr >
<td> Description </td>
<td>
<textarea name='designation' rows='3' cols='19
+'> <xsl:text> </xsl:text> </textarea>
</td>
</tr>
<tr >
<td colspan="2" align='right'>
<input type='Reset' name='Reset' value='Res
+et'></input>
<xsl:text> </xsl:text>
<input type="Button" name='Submit' value="Subm
+it" onclick="submit();"></input>
</td>
</tr>
</table>
</xsl:if>
<xsl:if test="/confirm">
<table align="Center">
<xsl:if test="/confirm/uname">
<tr>
<td>User Name : <xsl:value-of select="/
+confirm/uname"/></td>
</tr>
<tr>
<td>Selected Category : <xsl:value-of
+select="/confirm/name"/></td>
</tr>
<tr>
<td>Sender Mailid : <xsl:value-of select="/c
+onfirm/mail"/></td>
</tr>
</xsl:if>
<xsl:if test="/confirm/errorcode">
<tr>
<td><xsl:value-of select="/confirm/errorcode
+"/></td>
</tr>
</xsl:if>
<tr>
<td><a href='http://localhost/frm.pl'>Back</a></
+td>
</tr>
</table>
</xsl:if>
</form>
</xsl:template>
</xsl:stylesheet>