#!/usr/bin/perl -w package CGI::ToXML; #===================================================================== +======== # # $Id: ToXML.pm,v 0.01 2002/02/03 17:11:44 mneylon Exp $ # $Revision: 0.01 $ # $Author: mneylon $ # $Date: 2002/02/03 17:11:44 $ # $Log: ToXML.pm,v $ # Revision 0.01 2002/02/03 17:11:44 mneylon # Initial release to Perlmonks # # #===================================================================== +======== use strict; use XML::Simple; BEGIN { use Exporter (); use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS); $VERSION = sprintf( "%d.%02d", q( $Revision: 0.01 $ ) =~ /\s(\d+ +)\.(\d+)/ ); @ISA = qw(Exporter); @EXPORT = qw(); @EXPORT_OK = qw( CGItoXML ); %EXPORT_TAGS = ( ); } sub CGItoXML { my ( $cgi, %options ) = @_; if ( ! $cgi->isa( "CGI" ) ) { warn "CGItoXML: Object isn't a CGI object, cannot convert"; return undef; } # Determine which parameters we keep or not my @paramlist = $cgi->param; # Exclude what we can first... if ( exists $options{ exclude } ) { my %exclude_hash; $exclude_hash{ $_ }++ foreach @{ $options{ exclu +de } }; @paramlist = grep { !exists( $exclude_hash{ $_ } ) } @paramlist; } # Include what we can... if ( exists $options{ include } ) { my %include_hash; $include_hash{ $_ }++ foreach @{ $options{ inclu +de } }; @paramlist = grep { exists( $include_hash{ $_ } ) } @paramlist; } # Set up the hashes to be used for conversion my @params; foreach my $param ( @paramlist ) { my @values; # Ensure we get values as an array foreach my $value ( $cgi->param( $param ) ) { push @values, $value; } push @params, { parameter => { name => $param, value => \@values } }; } my %cgi_hash = ( cgi => { generator => "CGI::toXML", version => $VERSION, parameter => \@params } ); return XMLout( \%cgi_hash, rootname => undef ) ; } 1; __END__ # Below is stub documentation for your module. You better edit it! =head1 NAME CGI::ToXML - Converts CGI to an XML structure =head1 SYNOPSIS use CGI::ToXML qw( CGItoXML ); use CGI; my $q = new CGI; my $xml = CGItoXML( $q ); my $xml2 = CGItoXML( $q, exclude => [ password username sessionid ] +); =head1 DESCRIPTION Converts a CGI variable (from CGI.pm) to an XML data structure. While + there is currently a similar module, CGI::XML, by Jonathan Eisenzopf, the outputted XML is not in a very usable format, given the newer adva +nces in XML (such as XSLT, XPath, etc). CGI::ToXML aims to correct this by providing a cleaner XML structure that will be more useful. The XML i +s generated from XML::Simple, keeping this a 'lightweight' function. The module consists of a single function: $xml = CGItoXML( $cgi, %options ) $cgi must be a valid CGI.pm object, and if not, a warning will be issu +ed and the function will return undef. Otherwise, the function will retu +rn the XML as a string. The XML structure will be similar to the followi +ng: <cgi version="0.01" generator="CGI::toXML"> <parameter name="dinosaur"> <value>barney</value> <value>godzilla</value> </parameter> <parameter name="color"> <value>purple</value> </parameter> </cgi> as generated from the query string: "dinosaur=barney&dinosaur=godzilla&color=purple" The order of parameters and multivalued entries, as returned by CGI, i +s maintained in the XML. The options hash can be used to customize the behavior a bit more: =over 4 =item include => [ list ] Only include the parameters and their values specified in the given li +st; all other parameters are not included. Note that this does not affect + the CGI object storage. =item exclude => [ list ] Do not include the parameters and their values specified in the given +list; all other parameters are included. Note that this does not affect the CGI object storage. =back =head1 EXPORT No functions are exported by default, but CGItoXML can be exported by the user. =head1 AUTHOR Michael K. Neylon, E<lt>mneylon-pm@masemware.comE<gt> =head1 SEE ALSO L<perl>, L<CGI::XML>, L<XML::Simple>. =cut
In reply to CGI::ToXML by Masem
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |