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 )