XML::MinWriter - Perl extension for writing XML in PYX format.
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>
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.
write_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">'
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>
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>
Klaus Eichner, October 2011
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.
XML::TiePYX, XML::Reader, XML::Writer.
To install XML::MinWriter, copy and paste the appropriate command in to your terminal.
cpanm
cpanm XML::MinWriter
CPAN shell
perl -MCPAN -e shell install XML::MinWriter
For more information on module installation, please visit the detailed CPAN module installation guide.