1 % foreach my $row ( @$rows ) {
3 % if (&{$beginrow}($row)){
4 <% &{$beginrow}($row) %>
7 % foreach my $i ( 0 .. scalar( @{$opt{'fields'}} ) - 1 ) {
8 % my $field = $opt{'fields'}->[$i];
10 % if ( ref($field) eq 'CODE' ) {
11 % $value = &{$field}($row);
12 % $value = '(N/A)' #unimplemented
13 % if ref($value) eq 'ARRAY';
15 % $value = $row->$field();
18 <% &{$beginfield}($row, $i) %><% $value |h %><% &{$endfield}($row, $i) %>
22 % if (&{$endrow}($row)) {
23 <% &{$endrow}($row) %>
30 my $header = $args{'header'};
31 my $rows = $args{'rows'};
32 my %opt = %{ $args{'opt'} };
34 http_header('Content-Type' => 'application/XML' ); # So saith RFC 4180
35 http_header('Content-Disposition' =>
36 'attachment;filename="'.($opt{'name'} || PL($opt{'name_singular'}) ).'.xml"');
38 unless ( $opt{'fields'} ) {
39 foreach my $i ( 0 .. ( $#{ @$rows[0] } ) ) {
40 $opt{'fields'}->[$i] = sub { my $row = shift; $row->[$i]; };
44 my $beginrow = sub { return ''; };
45 my $endrow = sub { return ''; };
46 if ($opt{xml_row_element}) {
47 $beginrow = sub { my ($row, $index) = @_;
49 if ( ref($opt{xml_row_element}) eq 'CODE' ) {
50 $value = &{$opt{xml_row_element}}($row);
52 $value = $opt{xml_row_element};
56 $endrow = sub { my ($row, $index) = @_;
58 if ( ref($opt{xml_row_element}) eq 'CODE' ) {
59 $value = &{$opt{xml_row_element}}($row);
61 $value = $opt{xml_row_element};
66 my $beginfield = sub { my ($row, $index) = @_;
68 if ( ref($opt{xml_elements}->[$index]) eq 'CODE' ) {
69 $value = &{$opt{xml_elements}->[$index]}($row);
71 $value = $opt{xml_elements}->[$index];
75 my $endfield = sub { my ($row, $index) = @_;
77 if ( ref($opt{xml_elements}->[$index]) eq 'CODE' ) {
78 $value = &{$opt{xml_elements}->[$index]}($row);
80 $value = $opt{xml_elements}->[$index];
85 $beginfield = sub { return ''; } if $opt{no_field_elements}; #hmm
86 $endfield = sub { return ''; } if $opt{no_field_elements}; #hmm