XML::Writer 0.1 available

Date:    Mon, 19 Apr 1999 15:02:27 -0400 (EDT)
From:    David Megginson <david@megginson.com>
To:      Perl-XML Mailing List <perl-xml@listserv.activestate.com>
Subject: XML::Writer 0.1 available

I needed this, so I wrote it this morning:


(I've also sent an upload to CPAN, but it might take a while to appear). Here's a very simple synopsis:

  use XML::Writer;
  use IO;

  my $output = new IO::File(">output.xml");
  my $writer = new XML::Writer($output);

                    "class" => "simple");
  $writer->characters("Hello, world!");


(You can also leave out the $output argument if you want to go straight to STDOUT.)

By default, the module does a fair bit of well-formedness checking to help you catch bugs in your Perl programs -- you can turn the checking off for production use if you like to live on the wild side.

Here are the errors that the module catches so far:

Full POD documentation and a lot of test cases in test.pl are included.


Benjamin Holzman writes:

 > This seems to duplicate the functionality in my XML::Generator,
 > more or less.  Did you look at that module and decide it wasn't
 > appropriate?

I took a quick glance at the README, test.pl, and Generator.pm --
XML::Generator uses a very interesting approach, but (at least as far
as I read) it is quite different from the approach that I took with

XML::Generator seems to require that the entire structure be held in
memory at once, as hash or array references or what-have-you.  While
that approach can be very powerful and expressive, it is not suitable
for dealing with very large documents that cannot be held in memory
all at once.

XML::Writer is designed to align very closely with the (important)
callbacks in the Handler flavour of XML::Parser, so that it's simple
to write an identity transform:

  use XML::Parser;
  use XML::Writer;

  my $writer = new XML::Writer();

  sub start {
    my ($expat, $name, @atts) = (@_);
    $writer->startTag($name, @atts);

  sub end {
    my ($expat, $name) = (@_);

  sub char {
    my ($expat, $data) = (@_);

  my $parser = new XML::Parser(Handlers => {Start => \&start,
                                            End => \&end,
                                            Char => \&char});

Apologies if I have misinterpreted XML::Generator.


David Megginson                 david@megginson.com