package EPrints::Plugin::Export::XML; use Unicode::String qw( utf8 ); use EPrints::Plugin::Export; @ISA = ( "EPrints::Plugin::Export" ); use strict; # The utf8() method is called to ensure that # any broken characters are removed. There should # not be any broken characters, but better to be # sure. sub new { my( $class, %opts ) = @_; my( $self ) = $class->SUPER::new( %opts ); $self->{name} = "EP3 XML"; $self->{accept} = [ 'list/*', 'dataobj/*' ]; $self->{visible} = "all"; $self->{suffix} = ".xml"; $self->{mimetype} = "text/xml"; return $self; } sub output_list { my( $plugin, %opts ) = @_; my $type = $opts{list}->get_dataset->confid; my $toplevel = $type."s"; my $r = []; my $part; $part = '<?xml version="1.0" encoding="utf-8" ?>'."\n<$toplevel>\n"; if( defined $opts{fh} ) { print {$opts{fh}} $part; } else { push @{$r}, $part; } foreach my $dataobj ( $opts{list}->get_records ) { $part = $plugin->output_dataobj( $dataobj, %opts ); if( defined $opts{fh} ) { print {$opts{fh}} $part; } else { push @{$r}, $part; } } $part= "</$toplevel>\n"; if( defined $opts{fh} ) { print {$opts{fh}} $part; } else { push @{$r}, $part; } if( defined $opts{fh} ) { return; } return join( '', @{$r} ); } sub output_dataobj { my( $plugin, $dataobj ) = @_; my $itemtype = $dataobj->get_dataset->confid; my $xml = $plugin->xml_dataobj( $dataobj ); return EPrints::XML::to_string( $xml ); } sub xml_dataobj { my( $plugin, $dataobj ) = @_; return $dataobj->to_xml; } 1;