Any-Renderer
view release on metacpan or search on metacpan
lib/Any/Renderer/XML.pm view on Meta::CPAN
package Any::Renderer::XML;
# $Id: XML.pm,v 1.8 2006/08/22 20:14:09 johna Exp $
use strict;
use vars qw($VERSION);
use XML::Simple;
$VERSION = sprintf"%d.%03d", q$Revision: 1.8 $ =~ /: (\d+)\.(\d+)/;
use constant FORMAT_NAME => "XML";
sub new
{
my ( $class, $format, $options ) = @_;
die("Invalid format $format") unless($format eq FORMAT_NAME);
my $self = {
'options' => $options,
};
bless $self, $class;
return $self;
}
sub render
{
my ( $self, $data ) = @_;
TRACE ( "Rendering XML data" );
DUMP ( $data );
my $charset = $self->{options}{Encoding} || 'ISO-8859-1';
my %xmlopts = (
'noattr' => 1,
'keyattr' => undef,
'keeproot' => 1,
'rootname' => 'output',
'xmldecl' => qq{<?xml version="1.0" encoding="$charset" standalone="yes"?>},
'contentkey' => undef,
'noescape' => 0,
);
while ( my ( $k, $v ) = each %{ $self->{ 'options' }->{ 'XmlOptions' } } )
{
# smash case to ensure the options override defaults
$xmlopts { lc $k } = $v;
}
if (my $varname = $self->{ 'options' }{ 'VariableName' }) {
# VariableName overrides the 'options' hash
$xmlopts { 'rootname' } = $varname;
}
my $out = '';
{
# XML::Simple 1.23 produces use-of-uninitialized... warnings
local $^W = 0;
$out = XML::Simple::XMLout ( $data, %xmlopts );
}
return $out;
}
sub requires_template
{
my ( $format ) = @_;
return 0;
}
sub available_formats
{
return [ FORMAT_NAME ];
}
sub TRACE {}
sub DUMP {}
1;
=head1 NAME
Any::Renderer::XML - render a data structure as element-only XML
=head1 SYNOPSIS
use Any::Renderer;
my %xml_options = ();
my %options = ( 'XmlOptions' => \%xml_options );
my $format = "XML";
my $r = new Any::Renderer ( $format, \%options );
my $data_structure = [...]; # arbitrary structure code
my $string = $r->render ( $data_structure );
You can get a list of all formats that this module handles using the following syntax:
my $list_ref = Any::Renderer::XML::available_formats ();
( run in 1.357 second using v1.01-cache-2.11-cpan-39bf76dae61 )