NAME
XML::MinWriter - Perl extension for writing XML in PYX format.
SYNOPSIS
Here is a simple example of how to use XML::MinWriter:
use XML::MinWriter;
open my $fh, '>', \my $xml or die $!;
my $wrt = XML::MinWriter->new(OUTPUT => $fh, DATA_MODE => 1, DATA_INDENT => 2);
$wrt->xmlDecl('iso-8859-1');
$wrt->startTag('alpha');
$wrt->startTag('beta', p1 => 'dat1', p2 => 'dat2');
$wrt->characters('abcdefg');
$wrt->endTag('beta');
$wrt->write_pyx('(gamma');
$wrt->write_pyx('-hijklmn');
$wrt->write_pyx(')gamma');
$wrt->endTag('alpha');
$wrt->end;
close $fh;
print "The XML generated is as follows:\n\n";
print $xml, "\n";
...and this is the output:
<?xml version="1.0" encoding="iso-8859-1"?>
<alpha>
<beta p1="dat1" p2="dat2">abcdefg</beta>
<gamma>hijklmn</gamma>
</alpha>
DESCRIPTION
Introduction
XML::MinWriter is a module to write XML in PYX Format. It inherits from XML::Writer and adds a new method write_pyx
. Modules XML::TiePYX and XML::Reader produce PYX which can then be fed into XML::MinWriter to generate XML using the write_pyx() method.
Pyx
Pyx is a line-oriented text format to represent XML. The first character of a line in Pyx represents the type. This first character type can be:
'(' => a Start tag, '(item' translates into '<item>'
')' => an End tag, ')item' translates into '</item>'
'-' => Character data, '-data' translates into 'data'
'A' => Attributes, 'Aattr v1' translates into '<... attr="v1">'
'?' => Process Instructions, '?xml dat="p1"' translates into '<?xml dat="p1"?>'
'#' => Comments, '#remark' translates into '<!-- remark -->'
'!' => Doctype, '!tag SYSTEM "abc"' translates into '<!DOCTYPE tag SYSTEM "abc">'
Example using Pyx
For example the following PYX code:
use XML::MinWriter;
open my $fh, '>', \my $xml or die $!;
my $wrt = XML::MinWriter->new(OUTPUT => $fh, DATA_MODE => 1, DATA_INDENT => 2);
$wrt->write_pyx('?xml version="1.0" encoding="iso-8859-1"');
$wrt->write_pyx('(data');
$wrt->write_pyx('(item');
$wrt->write_pyx('Aattr1 p1');
$wrt->write_pyx('Aattr2 p2');
$wrt->write_pyx('-line');
$wrt->write_pyx(')item');
$wrt->write_pyx('(level');
$wrt->write_pyx('#remark');
$wrt->write_pyx(')level');
$wrt->write_pyx(')data');
$wrt->end;
close $fh;
print "The XML generated is as follows:\n\n";
print $xml, "\n";
...generates the following XML:
<?xml version="1.0" encoding="iso-8859-1"?>
<data>
<item attr1="p1" attr2="p2">line</item>
<level>
<!-- remark -->
</level>
</data>
Example using XML::Reader
A sample code fragment that uses XML::Reader together with XML::MinWriter:
use XML::Reader;
use XML::MinWriter;
my $line = q{
<data>
<order>
<database>
<customer name="aaa" >one</customer>
<customer name="bbb" >two</customer>
<other>iuertyieruyt</other>
<customer name="ccc" >three</customer>
<customer name="ddd" >four</customer>
</database>
</order>
</data>
};
my $rdr = XML::Reader->new(\$line, {
using => '/data/order/database/customer',
mode => 'pyx',
});
open my $fh, '>', \my $xml or die "Error-0010: Can't open > xml because $!";
my $wrt = XML::MinWriter->new(OUTPUT => $fh, DATA_MODE => 1, DATA_INDENT => 2);
$wrt->xmlDecl('iso-8859-1');
$wrt->doctype('delta', 'public', 'system');
$wrt->startTag('delta');
while ($rdr->iterate) {
$wrt->write_pyx($rdr->pyx);
}
$wrt->endTag('delta');
$wrt->end;
close $fh;
print $xml, "\n";
This is the resulting XML:
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE delta PUBLIC "public" "system">
<delta>
<customer name="aaa">one</customer>
<customer name="bbb">two</customer>
<customer name="ccc">three</customer>
<customer name="ddd">four</customer>
</delta>
AUTHOR
Klaus Eichner, October 2011
COPYRIGHT AND LICENSE
Copyright (C) 2011 by Klaus Eichner
XML::MinWriter is free software; you can redistribute and/or modify XML::MinWriter under the same terms as Perl itself.