Hi, just posting my code as requested by zentara
cheers johnk #!/usr/bin/perl -wT # # use strict; use XML::DOM; use CGI qw/:standard -nosticky/; my $q = new CGI; my $minMass = $q->param( "minmass" ) || error( $q, "No Min Mass entered." ); my $maxMass = $q->param( "maxmass" ) || error( $q, "No Max Mass entered." ); if ($maxMass <= $minMass){ error ( $q, "Invalid Mass Window entered." ); } my @tableData; my $parser = new XML::DOM::Parser; my $doc = $parser->parsefile("particles.xml"); my @particles = $doc->getElementsByTagName("Particle"); foreach my $particle (@particles){ my @melement = $particle->getElementsByTagName("Mass"); my @qualities = $melement[0]->getChildNodes; foreach my $quality (@qualities){ my $thisMass = $quality->toString if ($quality->getNodeType eq TEXT_NODE); if ($thisMass >= $minMass && $thisMass <= $maxMass){ &writeout($particle); } } } sub writeout{ my $particle = shift; my $outName = &getValue($particle,"Name"); my $outMass = &getValue($particle,"Mass"); my $outWidth = &getValue($particle,"Width"); my $outCharges = &getValue($particle,"Charges"); push @tableData,[$outName,$outMass,$outWidth,$outCharges]; } sub getValue{ my ($particle,$tag) = @_; my @elements = $particle->getElementsByTagName($tag); if ([EMAIL PROTECTED]){return "N/A"}; my @qualities = $elements[0]->getChildNodes; foreach my $quality (@qualities){ my $thisValue = $quality->toString if ($quality->getNodeType eq TEXT_NODE); return $thisValue; } } my $len = scalar(@tableData); print $q->header(-type=>'text/html', -expires=>'now'); print $q->header("Pragma: no-cache"); print "<HTML>\n"; if ($len == 0 ) { error( $q, "No particles found in mass window." ); }else{ print "<TABLE ALIGN=CENTER WIDTH=\"80\%\" CELLSPACING=2 CELLPADDING=2 BORDER=2 BGCOLOR=LIGHTBLUE>\n"; print "<TR>\n"; print "<TD>Name</TD>\n"; print "<TD>Mass</TD>\n"; print "<TD>Width</TD>\n"; print "<TD>Charges</TD>\n"; for (my $i=0; $i<$len; $i++){ print "<TR>\n"; print "<TD>$tableData[$i]->[0]</TD>\n"; print "<TD>$tableData[$i]->[1]</TD>\n"; print "<TD>$tableData[$i]->[2]</TD>\n"; print "<TD>$tableData[$i]->[3]</TD>\n"; print "</TR>\n"; } print "<TABLE>\n"; } print "</HTML>\n"; $doc->dispose; $q->delete_all; exit; sub error { my( $q, $reason ) = @_; print $q->header(-type=>'text/html', -expires=>'now'), $q->start_html( "Error" ), $q->h1( "Error" ), $q->p( "Your request was not procesed because the following error ", "occured: " ), $q->p( $q->i( $reason ) ); print "$minMass : $maxMass\n"; $q->end_html; exit; } On Sat, 17 Apr 2004, zentara wrote: > On Fri, 16 Apr 2004 12:31:34 +0100 (GMT), [EMAIL PROTECTED] (John > Kennedy) wrote: > > >Hi, > > > >I am a bit of a beginner and this is my first time using a mailing list so > >please go easy with me. > > > >I have a problem with a perl/cgi script I have written. > > > >It's a simple script that takes 2 values and parses an xml file for all > >entries which lie between the two. It then takes the answers and posts a > >table back so you can see what lies within your specified window. > > > >I use > > > >use strict; > >use XML::DOM; > >use CGI qw/:standard -nosticky/; > > > >The script works fine from the command line when debugging and also works > >fine when I test it from my browser. > > > >The problem arrises when I try a second set of values. The script seems to > >remember the original values and sticks with them BUT the parse of the xml > >file is messed up. Basically if I submit a second request the error which > >I output tells me that no entries were found and details the window to be > >the previous window not the one defined by the new values I use.. > > Are you using modperl and are unaware of it? modperl will keep > values around. > > >I am really confused about this. > > > >To make things worse if I wait a little and click reload with the error > >still present on my browser window then it correctly uses the new values > >and correctly parses the xml file.. > > > >The problem seems time dependent. If I wait for 5 seconds after I submit a > >request and then submit a new one I get the correct behaviour.(sometimes > >this takes longer to work). > > > >The cgi script seems to be saving the final state of my previous request > >and I don't know how to stop this.. > > > >can anybody help?? > > You should post the code so people can look at it. > Some wild ideas which pop into mind. > > -- a weird flocking problem with the XML file ? > -- some sort of cacheing problem keeping temp files laying around ? > > > > > -- Dr. John A Kennedy email: [EMAIL PROTECTED] LMU Muenchen Sektion Physik Am Coulombwall 1 Phone: 0049(89)2891 4152 D 85748 Garching, Germany Fax: 0049(89)2891 4103 -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>