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 < + > into > + & into & + ' into ' + " into " - 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() 0.48 09 Aug 2012 Refactor Test cases in XML::Reader::Testcases. 0.49 09 Aug 2012 Make "use XML::Reader" (without any arguments) not load any of the modules "XML::Parser" or "XML::Parsepp". 0.50 08 Aug 2014 Add the possibility of reading http (using Net::HTTP) 0.51 09 Aug 2014 Fix a typing error in the POD documentation: "...an URL..." ==> "...a URL..." 0.52 12 Aug 2014 I had forgotten to change another thing in the documentation (since 0.40, 24 Jun 2012): "use XML::Reader;" should be spelled: "use XML::Reader qw(XML::Parser);" 0.53 13 Aug 2014 This entry (0.53) only exists because I have forgotten to put in a changes entry in the previous version (0.52) 0.54 17 Aug 2014 introduce Acme::HTTP 0.55 18 Aug 2014 replace the comple time "use Acme::HTTP" by the run time "require Acme::HTTP"