I've been using XML::Writer for 3 years now and it works very well for my needs; it cannot convert data structures to XML, but it is perfect if you want to compose XML programmatically; its capability of pretty printing is configurable; a good module in my opinion!
use strict;
use warnings;
use IO::String;
use XML::Writer;
my $struct = {
epoch => time(),
events => [
{ type => 'move', elements => { left => 1, up => 2 } },
{ type => 'pen', elements => { down => 1, color => 'red' } },
{ type => 'move', elements => { right => 3, up => 1 } },
],
};
print to_xml($struct), "\n";
exit;
sub to_xml {
my $input = shift;
my $buffer;
my $io = IO::String->new($buffer);
my $xml = XML::Writer->new(
OUTPUT => $io,
NEWLINES => 0,
DATA_MODE => 1,
DATA_INDENT => 2,
);
$xml->xmlDecl('UTF-8');
$xml->startTag(
'block',
'time' => $input->{epoch}
);
foreach my $event (@{ $input->{events} }) {
$xml->emptyTag(
$event->{type},
%{ $event->{elements} }
);
}
$xml->endTag('block');
$xml->end();
return $buffer;
}
The code above prints:
<?xml version="1.0" encoding="UTF-8"?>
<block time="1175447784">
<move left="1" up="2" />
<pen color="red" down="1" />
<move right="3" up="1" />
</block>
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.