The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
Revision history for XML-Reader

0.01    22 Mar 2009
        First version, released on an unsuspecting world.

0.02    25 Mar 2009
        add method level to indicate the nesting level of the XPath expression.

0.03    26 Mar 2009
        resolve circular reference in XML::TokeParser to avoid Memory leak

0.04    27 Mar 2009
        Replace XML::TokeParser by XML::Parser
        add option {using => ...} and also add method prefix

0.05    28 Mar 2009
        fix a bug in option {using => ...}

0.06    30 Mar 2009
        re-order the output in XML::Reader->path

0.07    02 Apr 2009
        add a method XML::Reader->comment

0.08    06 Apr 2009
        update warranty

0.09    06 Apr 2009
        update licence
        update Makefile.PL

0.10    20 Jun 2009
        Take out one test from t/0010-test.t

0.11    24 Jun 2009
        add method XML::Reader->is_init_attr() and XML::Reader->attr().
        also, in case of {filter => 1}, undefine XML::Reader->is_start(),
        XML::Reader->is_init_attr(), XML::Reader->is_end(), XML::Reader->comment().
        Introduce {filter => 2} which removes the redundant start-line before
        attributes.

0.12    28 Jun 2009
        add constructor XML::Reader->newhd, which is almost identical to
        XML::Reader->new, except it defaults to {filter => 2}, whereas
        the existing XML::Reader->new defaults to {filter => 0}

0.13    28 Jun 2009
        error correction in XML::Reader->is_init_attr()

0.14    29 Jun 2009
        add {filter => 3} and method $rdr->att_hash()

0.15    29 Jun 2009
        internal tuning

0.16    30 Jun 2009
        more internal tuning

0.17    05 Jul 2009
        even more internal tuning in handle_start() and in handle_end()

0.18    30 Jul 2009
        remove method XML::Reader->is_init_attr()
        add processing instructions ("PI")
        add option {parse_ct} for comments
        add option {parse_pi} for processing-instructions
        add option {filter => 4} and method XML::Reader->pyx() for PYX compliant data

0.19    22 Aug 2009
        remove option {filter => 0} and {filter => 1}
        remove method new()
        introducing "use Carp" and "croak"
        clean up documentation and test cases

0.20    25 Aug 2009
        add method is_value()
        add some example code to parse an XML file with XML::Reader

0.21    12 Sep 2009
        in method XML::Reader::DESTROY()
          replace $self->{ExpatNB}->parse_done;
          by      $self->{ExpatNB}->release;
        in XML::Reader->new(): inject an {XR_debug} into $self->{ExpatNB}, if so requested
          by $opt{debug}
        add t/0030_test.t to test that XML::Reader does not leak memory
        explain documentation (=item is_value) in more detail
        translate POD-documentation into French: pod/XML-Reader-fr.pod
        translate POD-documentation into German: pod/XML-Reader-de.pod
        re-licence under the Artistic licence

0.22    18 Sep 2009
        Needed to bump up the version number due to wrong indexing of the
        pod/XML-Reader-de/-fr.pod file in http://search.cpan.org/
        Basically, I am renaming/relocating the two files
        pod/XML-Reader-de.pod into lib/XML/Reader-de.pod
        pod/XML-Reader-fr.pod into lib/XML/Reader-fr.pod

0.23    19 Sep 2009
        Needed to bump up the version number again due to wrong indexing.
        Now I am introducing two new dummy *.pm files with their proper Packages
        rename pod/XML-Reader-de.pod into lib/XML/Reader/German.pm
        rename pod/XML-Reader-fr.pod into lib/XML/Reader/French.pm

0.24    19 Sep 2009
        Need to bump up the version number again, the indexing is still not working.
        That's probably due to the missing =pod directive.
        I have now added the =pod directive and I keep my fingers crossed

0.25    20 Sep 2009
        AGAIN AND AGAIN: Need to bump up the version number, the indexing is still not working.
        renamed the two *.pm files into *.pod again.

0.26    09 Oct 2009
        Introduce a new function: 'slurp_xml' to slurp xml into an array-ref

0.27    10 Oct 2009
        Change the way 'slurp_xml' handles its parameters

0.28    13 Oct 2009
        Allow multiple roots in 'slurp_xml'
        inject a "use 5.008" into Makefile.PL

0.29    29 Oct 2009
        Add {filter => 5}

0.30    25 Jan 2010
        include
          translated POD-documentation into French: XML-Reader-fr.pod
          translated POD-documentation into German: XML-Reader-de.pod
        add Build.PL

0.31    29 Jan 2010
        - I am suddenly getting automated reports about test failures on systems where
          XML::Parser has not been installed. To fix that problem, I have to add the
          correct module dependency in Build.PL and in Makefile.PL.
        - harmonize the version number in XML::Reader::Token with the version number
          in XML::Reader

0.32    17 Feb 2010
        Fix a problem in Build.PL which had an incorrect version use 5.010; the correct
        version is use 5.008;

0.33    25 Apr 2010
        For {filter => 5}:
          - you can now have duplicate roots (which was not possible before)
          - added a new function $self->rstem
          - allow branch => '*' which will effectively collect all events and construct
            a sub-tree in XML format, that XML-format has the correct translations
              + < into &lt;
              + > into &gt;
              + & into &amp;
              + ' into &apos;
              + " into &quot;
          - allow relative roots, such as 'tag1/tag2' or '//tag1/tag2'

0.34    26 Apr 2010
        For {filter => 5}: restrict { branch => '...' } to { branch => '*' } only

0.35    28 Apr 2010
        Relicencing under the "Artistic Licence 2.0"
        Replace XML::Reader::newhd()
             by XML::Reader::new()
        Add option
          {mode   => 'attr-bef-start' | 'attr-in-hash' | 'pyx' | 'branches'} as an alternative to the existing
          {filter => 2|3|4|5}
        Add an option {sepchar => 'xyz'} to XML::Reader->new
        For {parse_pi => 1}, fix a bug with $rdr->dec_hash->{standalone}
          (used to be '1' and '' which is false, 'yes' and 'no' is correct)
        For {filter => 5}:
          - function rstem() is redundant ==> replace function rstem() by path()
          - fix a bug in functions is_text() / is_value()
          - allow the writing of comments and PI if {branch => '*'} is selected

0.36    01 June 2010
        in case of {filter => 5}, make value() take over the role of rvalue()
        Improve the content of the README file

0.37    02 June 2010
        The POD documentation has headers (=head1 and =head2) that are too
        complicated, i.e. they contain characters like '(', ')' and '>'. This confuses
        the POD Parser. This version simplifies the headers. (all 3 POD files are
        affected: 'Reader.pm', 'Reader_fr.pod' and 'Reader_de.pod'

0.38    18 Oct 2011
        For PYX output, replace a single \ by a double \\ and replace tabs by a literal "\t"
        Remove META.yml from MANIFEST

0.39    28 Oct 2011
        For filter => 5, add a new option '+' : {root => '/path1/path2', branch => '+'}
          that allows to return an array of PYX-elements.
        For filter => 5, existing option '*' : {root => '/path1/path2', branch => '*'}
          replace reference to scalar in $self->{rvalue} by a plain scalar.
        Remove deprecated functions newhd() and rstem()
        Introduce XML::MinWriter

0.40    24 Jun 2012
        Allow XML::Reader to use the pure perl parser XML::Parsepp as an alternative to the
        usual XML::Parser.

0.41    28 Jul 2012
        Change the way XML::Reader->new is used: (XML::Reader->new() now throws an
        exception)
        Old way: my $rdr = XML::Reader->new('test.xml') or die "Error: $!";
        New way: my $rdr = eval{ XML::Reader->new('test.xml') } or die "Error: $@";
        or new : my $rdr = XML::Reader->new('test.xml');

0.42    30 Jul 2012
        Add test file 0040_test_Module.t

0.43    04 Aug 2012
        Add a new option "dupatt" to XML::Reader->new() to allow for duplicate
        attributes: (only valid when used in conjunction with "use XML::Reader qw(XML::Parsepp);")
        my $rdr = XML::Reader->new('test.xml', {dupatt => '|'});
        The concatenation string {dupatt => $str} is restricted to printable ascii excluding alphanumeric, " and '
        Include explicit dependency on version 0.04 of XML::Parsepp

0.44    04 Aug 2012
        Allow { dupatt => '|' } with slurp_xml()
        Allow { root => '/' } with { filter => 5 } / slurp_xml()

0.45    05 Aug 2012
        Refactor the code that allows { root => '/' } with { filter => 5 } / slurp_xml()

0.46    06 Aug 2012
        Error correction in the code that allows { root => '/' } with { filter => 5 } / slurp_xml()

0.47    07 Aug 2012
        Remove the dependencies on XML::Parser and XML::Parsepp and refactor/move the tests
        out into XML::Reader::Testcases. The tests will later be called by the new modules
        XML::Reader::PP and by XML::Reader::RS
        Yet more error correction in the code that allows { root => '/' } with { filter => 5 }
        / slurp_xml()