package SPOPS::Export::XML; # $Id: XML.pm,v 3.3 2004/06/02 00:48:22 lachoy Exp $ use strict; use base qw( SPOPS::Export ); $SPOPS::Export::XML::VERSION = sprintf("%d.%02d", q$Revision: 3.3 $ =~ /(\d+)\.(\d+)/); use constant DEFAULT_DOC_TAG => 'spops'; use constant DEFAULT_OBJECT_TAG => 'spops-object'; my @FIELDS = qw( document_tag object_tag ); SPOPS::Export::XML->mk_accessors( @FIELDS ); sub initialize { my ( $self, $params ) = @_; $self->document_tag || $self->document_tag( DEFAULT_DOC_TAG ); $self->object_tag || $self->object_tag( DEFAULT_OBJECT_TAG ); return $self; } sub get_fields { return ( $_[0]->SUPER::get_fields, @FIELDS ) } sub create_header { return '<' . $_[0]->document_tag . ">\n" } sub create_footer { return 'document_tag . ">\n" } sub create_record { my ( $self, $object, $fields ) = @_; my @output = ( ' <' . $_[0]->object_tag . '>' ); foreach my $field ( @{ $fields } ) { push @output, join( '', " <$field>", $self->serialize_field_data( $object->{ $field } ), "" ); } push @output, ' object_tag . '>', ''; return join( "\n", @output ); } sub serialize_field_data { my ( $self, $data ) = @_; $data =~ s/&/&/g; $data =~ s//>/g; return $data; } 1; __END__ =head1 NAME SPOPS::Export::XML - Export SPOPS objects in XML format =head1 SYNOPSIS # See SPOPS::Export =head1 DESCRIPTION Implement XML output for L. =head1 PROPERTIES B Define the document tag. Default is: 'spops', so the resulting document is: ... B Define the surrounding tag for each object. Default is 'spops-object', so if you use the default C as well the resulting document will look like: bar foo foo bar ... =head1 METHODS B Output the opening document tag. B Output the closing document tag. B Output the individual object. B Escape relevant values in C<$data>. For right now, we just escape the '&', 'E' and 'E' characters. =head1 BUGS B We currently do fairly minimal escaping. Will probably use L or some other module to deal with this. =head1 TO DO Nothing known. =head1 SEE ALSO L L =head1 COPYRIGHT Copyright (c) 2001-2004 intes.net, inc.. All rights reserved. This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 AUTHORS Chris Winters Echris@cwinters.comE