SPOPS::Export::XML - Export SPOPS objects in XML format


SPOPS documentation Contained in the SPOPS distribution.

Index


Code Index:

NAME

Top

SPOPS::Export::XML - Export SPOPS objects in XML format

SYNOPSIS

Top

 # See SPOPS::Export

DESCRIPTION

Top

Implement XML output for SPOPS::Export.

PROPERTIES

Top

document_tag

Define the document tag. Default is: 'spops', so the resulting document is:

 <spops>
  ...
 </spops>

object_tag

Define the surrounding tag for each object. Default is 'spops-object', so if you use the default document_tag as well the resulting document will look like:

 <spops>
    <spops-object>
       <field1>bar</field1>
       <field2>foo</field2>
    </spops-object>
    <spops-object>
       <field1>foo</field1>
       <field2>bar</field2>
    </spops-object>
    ...
 </spops>

METHODS

Top

create_header

Output the opening document tag.

create_footer

Output the closing document tag.

create_record( $object, $fields )

Output the individual object.

serialize_field_data( $data )

Escape relevant values in $data. For right now, we just escape the '&', '<' and '>' characters.

BUGS

Top

Minimal escaping

We currently do fairly minimal escaping. Will probably use HTML::Entities or some other module to deal with this.

TO DO

Top

Nothing known.

SEE ALSO

Top

SPOPS::Export

SPOPS::Manual::ImportExport (SPOPS::Manual::ImportExport)

COPYRIGHT

Top

AUTHORS

Top

Chris Winters <chris@cwinters.com>


SPOPS documentation Contained in the SPOPS distribution.

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 '</' . $_[0]->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 } ),
                                "</$field>" );
    }
    push @output, '  </' . $_[0]->object_tag . '>', '';
    return join( "\n", @output );
}


sub serialize_field_data {
    my ( $self, $data ) = @_;
    $data =~ s/&/&amp;/g;
    $data =~ s/</&lt;/g;
    $data =~ s/>/&gt;/g;
    return $data;
}
1;

__END__