You can subscribe to this list here.
2002 |
Jan
(8) |
Feb
(22) |
Mar
(3) |
Apr
(13) |
May
(1) |
Jun
(4) |
Jul
|
Aug
(5) |
Sep
(9) |
Oct
(36) |
Nov
(7) |
Dec
(15) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2003 |
Jan
(4) |
Feb
(1) |
Mar
(55) |
Apr
(25) |
May
(25) |
Jun
(4) |
Jul
(2) |
Aug
|
Sep
(12) |
Oct
(6) |
Nov
(14) |
Dec
(1) |
2004 |
Jan
(1) |
Feb
(8) |
Mar
(6) |
Apr
(5) |
May
|
Jun
|
Jul
|
Aug
(1) |
Sep
(1) |
Oct
(3) |
Nov
(11) |
Dec
|
2005 |
Jan
(14) |
Feb
(3) |
Mar
(4) |
Apr
(14) |
May
(1) |
Jun
|
Jul
(1) |
Aug
|
Sep
(1) |
Oct
(2) |
Nov
(2) |
Dec
(1) |
2006 |
Jan
|
Feb
|
Mar
|
Apr
(3) |
May
|
Jun
|
Jul
|
Aug
(1) |
Sep
(8) |
Oct
(19) |
Nov
(5) |
Dec
|
2007 |
Jan
(5) |
Feb
(1) |
Mar
|
Apr
(4) |
May
|
Jun
|
Jul
|
Aug
(8) |
Sep
|
Oct
|
Nov
|
Dec
|
2008 |
Jan
|
Feb
|
Mar
(2) |
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Ken M. <kma...@us...> - 2008-07-20 21:47:42
|
Update of /cvsroot/perl-xml/XML-Grove In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv16261 Modified Files: COPYING ChangeLog Log Message: * COPYING: Use same license statement as used in individual modules (same terms as perl). Index: COPYING =================================================================== RCS file: /cvsroot/perl-xml/XML-Grove/COPYING,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -d -r1.1.1.1 -r1.2 --- COPYING 2 Apr 1998 19:30:20 -0000 1.1.1.1 +++ COPYING 20 Jul 2008 21:47:49 -0000 1.2 @@ -1,22 +1,3 @@ Copyright (C) 1998 Ken MacLeod. All rights reserved. - -XML-Grove is free software; you can redistribute it and/or modify it -under the terms of the Artistic License distributed with Perl version -5.000 or (at your option) any later version. Please refer to the -Artistic License that came with your Perl distribution for more -details. - -The Artistic License should have been included in your distribution of -Perl. It resides in the file named "Artistic" at the top-level of the -Perl source tree (where Perl was downloaded/unpacked -- ask your -system administrator if you dont know where this is). Alternatively, -the current version of the Artistic License distributed with Perl can -be viewed on-line on the World-Wide Web (WWW) from the following URL: - - http://www.perl.com/perl/misc/Artistic.html - -The latest version of Perl can be obtained on the World-Wide web (WWW) -from the following URL: - - http://www.perl.com/CPAN/src/latest.tar.gz - +This program is free software; you can redistribute it and/or +modify it under the same terms as Perl itself. Index: ChangeLog =================================================================== RCS file: /cvsroot/perl-xml/XML-Grove/ChangeLog,v retrieving revision 1.42 retrieving revision 1.43 diff -u -d -r1.42 -r1.43 --- ChangeLog 1 Mar 2000 20:57:36 -0000 1.42 +++ ChangeLog 20 Jul 2008 21:47:49 -0000 1.43 @@ -1,3 +1,8 @@ +2008-07-20 Ken MacLeod <ke...@bi...> + + * COPYING: Use same license statement as used in individual + modules (same terms as perl). + 2000-03-01 Ken MacLeod <ke...@bi...> * README: change references from PerlSAX to just SAX |
From: Grant M. <gr...@us...> - 2008-03-18 09:12:22
|
Update of /cvsroot/perl-xml/perl-xml-faq In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26754 Modified Files: faq.css Log Message: - bump up font size for module names Index: faq.css =================================================================== RCS file: /cvsroot/perl-xml/perl-xml-faq/faq.css,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- faq.css 14 Oct 2003 09:13:47 -0000 1.3 +++ faq.css 18 Mar 2008 09:12:22 -0000 1.4 @@ -42,6 +42,10 @@ font-size: 120%; } +CODE { + font-size: 120%; +} + .programlisting { padding-top: 0.8em; padding-left: 0.8em; |
From: Grant M. <gr...@us...> - 2008-03-18 09:11:40
|
Update of /cvsroot/perl-xml/perl-xml-faq In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26347 Modified Files: perl-xml-faq.xml Log Message: - add 'quick answer - XML::LibXML' and freshen up various other answers Index: perl-xml-faq.xml =================================================================== RCS file: /cvsroot/perl-xml/perl-xml-faq/perl-xml-faq.xml,v retrieving revision 1.26 retrieving revision 1.27 diff -u -d -r1.26 -r1.27 --- perl-xml-faq.xml 14 Nov 2006 08:39:28 -0000 1.26 +++ perl-xml-faq.xml 18 Mar 2008 09:11:37 -0000 1.27 @@ -15,11 +15,7 @@ </para></authorblurb> </author> <copyright> - <year>2002</year> - <year>2003</year> - <year>2004</year> - <year>2005</year> - <year>2006</year> + <year>2002 - 2008</year> <holder>Grant McLean</holder> </copyright> @@ -224,6 +220,22 @@ </answer> </qandaentry> + <qandaentry id="quick_choice"> + <question> + <para>The Quick Answer</para> + </question> + <answer> + + <para>For general purpose XML processing with Perl, <classname>XML::LibXML</classname> + is usually the best choice. It is stable, fast and powerful. To make the most of the + module you need to learn and use XPath expressions. The documentation for XML::LibXML is + its biggest weakness.</para> + + <para>Other modules may be better suited to particular niches - as discussed below.</para> + + </answer> + </qandaentry> + <qandaentry id="tree_vs_stream"> <question> <para>Tree versus stream parsers</para> @@ -347,14 +359,13 @@ <para>If your needs are simple, try <classname>XML::Simple</classname>. It's loosely classified as a tree based parser although the 'tree' is really just nested Perl hashes and arrays. You may need to swot up on - Perl references (<command>perldoc perlreftut</command>) to take advantage - of this module.</para> + Perl references (see: <command>perldoc perlreftut</command>) to take + advantage of this module.</para> <para>If you're looking for a more powerful tree based approach, try - <classname>XML::XPath</classname>. This module offers a DOM style API - with the added bonus of XPath support. If speed is critical, you'll - find that <classname>XML::LibXML</classname> is much faster but a bit - more 'bleeding edge'.</para> + <classname>XML::LibXML</classname> for a standards compliant DOM or + <classname>XML::Twig</classname> for a more 'Perl-like' API. Both of + these modules support XPath.</para> <para>If you've decided to use a stream based approach, head directly for SAX. The <classname>XML::SAX</classname> distribution @@ -365,12 +376,6 @@ C-based parser library ('expat' by James Clark) as <classname>XML::Parser</classname>, for faster parsing.</para> - <para>Another option worthy of investigation is - <classname>XML::Twig</classname>. This hybrid module combines the - convenience of a tree approach with the lower memory demands of the - stream style. You configure the parser and it gives you the document in - chunks (bits of the tree or 'twigs').</para> - <para>Finally, the latest trendy buzzword in Java and C# circles is 'pull' parsing (see <ulink url="http://www.xmlpull.org/" >www.xmlpull.org</ulink>). Unlike SAX, which 'pushes' events at your @@ -481,26 +486,29 @@ <para><classname>XML::LibXML</classname> provides a Perl wrapper around the GNOME Project's libxml2 library. This module was originally written - by Matt Sergeant and is now actively maintained by Christian Glahn. It - is very fast, complete and stable. It can run in validating or - non-validating modes and offers a DOM with XPath support. The DOM and - associated memory management is implemented in C which offers significant - performance advantages over DOM trees built from Perl datatypes. The - <classname>XML::LibXML::SAX::Builder</classname> module allows a libxml2 - DOM to be constructed from SAX events. + by Matt Sergeant and Christian Glahn and is now actively maintained by + Petr Pajas. It is very fast, complete and stable. It can run in + validating or non-validating modes and offers a DOM with XPath support. + The DOM and associated memory management is implemented in C which offers + significant performance advantages over DOM trees built from Perl + datatypes. The <classname>XML::LibXML::SAX::Builder</classname> module + allows a libxml2 DOM to be constructed from SAX events. <classname>XML::LibXML::SAX</classname> is a SAX parser based on the libxml2 library.</para> - <para><classname>XML::LibXML</classname> can be used to parse HTML (4.0 - strict) and SGML files into DOM structures - which is especially useful - when converting other formats to XML.</para> + <para><classname>XML::LibXML</classname> can also be used to parse HTML + files into DOM structures - which is especially useful when converting + other formats to XML or using XPath to 'scrape' data from web + pages.</para> <para>The libxml2 library is not part of the - <classname>XML::LibXML</classname> distribution. The source is available - for download from <ulink url="http://xmlsoft.org">xmlsoft.org</ulink>; - it is a standard package in most Linux distributions; it can be compiled - on numerous other platforms; and it is bundled with PPM packages of - <classname>XML::LibXML</classname> for Windows.</para> + <classname>XML::LibXML</classname> distribution. Precompiled + distributions of the libxml2 library and the + <classname>XML::LibXML</classname> Perl wrapper are available for most + operating systems. The library is a standard package in most Linux + distributions; it can be compiled on numerous other platforms; and it is + bundled with PPM packages of <classname>XML::LibXML</classname> for + Windows.</para> <para>For early access to upcoming features such as W3C Schema and RelaxNG validation, you can access the CVS version of <classname>XML::LibXML</classname> at:</para> @@ -518,13 +526,10 @@ </question> <answer> - <para>Matt Sergeant's <classname>XML::XPath</classname> module provides a - DOM implementation (in Perl) which supports XPath queries. It can't - rival <classname>XML::LibXML::SAX</classname> for speed but it may be - easier to install - especially if you don't have a compiler. Parsing XML - documents is performed by the expat library via - <classname>XML::Parser</classname>. You can serialise the DOM to SAX - events.</para> + <para>Matt Sergeant's <classname>XML::XPath</classname> module was the first + Perl DOM implementation to support XPath. It has largely been supplanted by + <classname>XML::LibXML</classname> which is better maintained and more + powerful.</para> </answer> </qandaentry> @@ -566,6 +571,16 @@ module also supports building the tree from SAX events or using a simple Perl data structure to drive a SAX pipeline.</para> + <para>If you are using <classname>XML::Simple</classname>, you should + read "<ulink url="http://www.perlmonks.org/index.pl?node_id=218480">Does + your XML::Simple code pass the strict test?</ulink>" for a discussion of + common pitfalls and ways to avoid them.</para> + + <para>If you are becoming frustrated by the limitations of + <classname>XML::Simple</classname>, see: "<ulink + url="http://www.perlmonks.org/index.pl?node_id=490846">Stepping up from + XML::Simple to XML::LibXML</ulink>".</para> + </answer> </qandaentry> @@ -588,8 +603,8 @@ <para>Another advantage of <classname>XML::Twig</classname> is that it is not constrained by the tyranny of DOM compliance. Instead, it offers a number of conveniences to help the experienced Perl programmer feel right - at home. The official home page for <classname>XML::Twig</classname> is - <ulink + at home. <classname>XML::Twig</classname> also supports XPath + expressions. The module's official home page for is <ulink url="http://www.xmltwig.com/">http://www.xmltwig.com/</ulink>.</para> </answer> @@ -643,13 +658,13 @@ </question> <answer> - <para>Matt Sergeant's <classname>XML::PYX</classname> comes with - some wrapper scripts for working with XML files using command line - pipelines. The PYX notation allows you to apply commands like - <command>grep</command> and <command>sed</command> to specific parts of - the XML document (eg: element names, attribute values, text content). - For example, this one-liner provides a report of how many times each - type of element is used in a document:</para> + <para>Although written in Perl, Matt Sergeant's + <classname>XML::PYX</classname> is really designed for working with XML + files using shell command pipelines. The PYX notation allows you to + apply commands like <command>grep</command> and <command>sed</command> to + specific parts of the XML document (eg: element names, attribute values, + text content). For example, this one-liner provides a report of how many + times each type of element is used in a document:</para> <programlisting><![CDATA[ pyx doc.xml | sed -n 's/^(//p' | sort | uniq -c |
From: Grant M. <gr...@us...> - 2007-08-15 10:38:11
|
Update of /cvsroot/perl-xml/xml-simple In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23871 Modified Files: Changes Log Message: - add die_or_warn handling for non-unique key attributes values during array folding Index: Changes =================================================================== RCS file: /cvsroot/perl-xml/xml-simple/Changes,v retrieving revision 1.31 retrieving revision 1.32 diff -u -d -r1.31 -r1.32 --- Changes 2 Aug 2007 10:44:07 -0000 1.31 +++ Changes 15 Aug 2007 10:36:47 -0000 1.32 @@ -1,5 +1,10 @@ Revision history for Perl module XML::Simple +2.18 Aug 15 2007 + - Non-unique key attribute values now trigger a warning (or a fatal + error in strict mode) rather than silently discarding data (patch + from Daniel Baysinger) + 2.17 Aug 02 2007 - Added parse_string(), parse_file() and parse_fh() methods - Added default_config_file(), and build_simple_tree() hook methods |
From: Grant M. <gr...@us...> - 2007-08-15 10:38:11
|
Update of /cvsroot/perl-xml/xml-simple/lib/XML In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23871/lib/XML Modified Files: Simple.pm Log Message: - add die_or_warn handling for non-unique key attributes values during array folding Index: Simple.pm =================================================================== RCS file: /cvsroot/perl-xml/xml-simple/lib/XML/Simple.pm,v retrieving revision 1.39 retrieving revision 1.40 diff -u -d -r1.39 -r1.40 --- Simple.pm 2 Aug 2007 10:40:16 -0000 1.39 +++ Simple.pm 15 Aug 2007 10:36:48 -0000 1.40 @@ -53,7 +53,7 @@ @ISA = qw(Exporter); @EXPORT = qw(XMLin XMLout); @EXPORT_OK = qw(xml_in xml_out); -$VERSION = '2.17'; +$VERSION = '2.18'; $PREFERRED_PARSER = undef; my $StrictMode = 0; @@ -1233,23 +1233,19 @@ ) { $val = $arrayref->[$i]->{$key}; if(ref($val)) { - if($StrictMode) { - croak "<$name> element has non-scalar '$key' key attribute"; - } - if($^W) { - carp "Warning: <$name> element has non-scalar '$key' key attribute"; - } + $self->die_or_warn("<$name> element has non-scalar '$key' key attribute"); return($arrayref); } $val = $self->normalise_space($val) if($self->{opt}->{normalisespace} == 1); + $self->die_or_warn("<$name> element has non-unique value in '$key' key attribute: $val") + if(exists($hashref->{$val})); $hashref->{$val} = { %{$arrayref->[$i]} }; $hashref->{$val}->{"-$key"} = $hashref->{$val}->{$key} if($flag eq '-'); delete $hashref->{$val}->{$key} unless($flag eq '+'); } else { - croak "<$name> element has no '$key' key attribute" if($StrictMode); - carp "Warning: <$name> element has no '$key' key attribute" if($^W); + $self->die_or_warn("<$name> element has no '$key' key attribute"); return($arrayref); } } @@ -1259,15 +1255,24 @@ # Or assume keyattr => [ .... ] else { + my $default_keys = + join(',', @DefKeyAttr) eq join(',', @{$self->{opt}->{keyattr}}); + ELEMENT: for($i = 0; $i < @$arrayref; $i++) { return($arrayref) unless(UNIVERSAL::isa($arrayref->[$i], 'HASH')); foreach $key (@{$self->{opt}->{keyattr}}) { if(defined($arrayref->[$i]->{$key})) { $val = $arrayref->[$i]->{$key}; - return($arrayref) if(ref($val)); + if(ref($val)) { + $self->die_or_warn("<$name> element has non-scalar '$key' key attribute") + if not $default_keys; + return($arrayref); + } $val = $self->normalise_space($val) if($self->{opt}->{normalisespace} == 1); + $self->die_or_warn("<$name> element has non-unique value in '$key' key attribute: $val") + if(exists($hashref->{$val})); $hashref->{$val} = { %{$arrayref->[$i]} }; delete $hashref->{$val}->{$key}; next ELEMENT; @@ -1289,6 +1294,25 @@ ############################################################################## +# Method: die_or_warn() +# +# Takes a diagnostic message and does one of three things: +# 1. dies if strict mode is enabled +# 2. warns if warnings are enabled but strict mode is not +# 3. ignores message and resturns silently if neither strict mode nor warnings +# are enabled +# + +sub die_or_warn { + my $self = shift; + my $msg = shift; + + croak $msg if($StrictMode); + carp "Warning: $msg" if($^W); +} + + +############################################################################## # Method: new_hashref() # # This is a hook routine for overriding in a sub-class. Some people believe @@ -2872,6 +2896,12 @@ =item * +Data error - as above, but non-unique values are present in the key attribute +(eg: more than one E<lt>partE<gt> element with the same partnum). This will +also trigger a warning if strict mode is not enabled. + +=item * + Data error - as above, but value of key attribute (eg: partnum) is not a scalar string (due to nested elements etc). This will also trigger a warning if strict mode is not enabled. |
From: Grant M. <gr...@us...> - 2007-08-15 10:38:11
|
Update of /cvsroot/perl-xml/xml-simple/t In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23871/t Modified Files: 1_XMLin.t 9_Strict.t Log Message: - add die_or_warn handling for non-unique key attributes values during array folding Index: 1_XMLin.t =================================================================== RCS file: /cvsroot/perl-xml/xml-simple/t/1_XMLin.t,v retrieving revision 1.27 retrieving revision 1.28 diff -u -d -r1.27 -r1.28 --- 1_XMLin.t 2 Aug 2007 10:35:40 -0000 1.27 +++ 1_XMLin.t 15 Aug 2007 10:36:48 -0000 1.28 @@ -17,7 +17,7 @@ plan skip_all => 'Test data missing'; } -plan tests => 122; +plan tests => 131; my $last_warning = ''; @@ -363,15 +363,15 @@ ] }; -$last_warning = ''; -$opt = XMLin($xml, @cont_key); -is_deeply($opt, $target, "did not fold on default key with non-scalar value"); -is($last_warning, '', 'no warning issued'); - { local($SIG{__WARN__}) = \&warn_handler; $last_warning = ''; + $opt = XMLin($xml, @cont_key); + is_deeply($opt, $target, "did not fold on default key with non-scalar value"); + is($last_warning, '', 'no warning issued'); + + $last_warning = ''; $opt = XMLin($xml, keyattr => { item => 'name' }, @cont_key); is_deeply($opt, $target, "did not fold on specific key with non-scalar value"); isnt($last_warning, '', 'warning issued as expected'); @@ -381,6 +381,15 @@ ); $last_warning = ''; + $opt = XMLin($xml, keyattr => [ 'name' ], @cont_key); + is_deeply($opt, $target, "same again but with keyattr as array"); + isnt($last_warning, '', 'warning issued as expected'); + like($last_warning, + qr{<item> element has non-scalar 'name' key attribute}, + 'text in warning is correct' + ); + + $last_warning = ''; local($^W) = 0; $opt = XMLin($xml, keyattr => { item => 'name' }, @cont_key); is_deeply($opt, $target, "did not fold on specific key with non-scalar value"); @@ -410,6 +419,38 @@ $opt = XMLin($xitems, keyattr => { item => 'name' }, @cont_key); is_deeply($opt, $items, "same again"); is($last_warning, '', 'but with no warning this time'); + + $last_warning = ''; + $^W = 1; + $xitems = q(<opt> + <item name="color">red</item> + <item name="mass">heavy</item> + <item name="disposition">ornery</item> + <item name="color">green</item> + </opt>); + $items = { + 'item' => { + 'color' => 'green', + 'mass' => 'heavy', + 'disposition' => 'ornery', + } + }; + $opt = XMLin($xitems, keyattr => { item => 'name' }, @cont_key); + is_deeply($opt, $items, "folded elements despite non-unique key attribute"); + like($last_warning, qr{Warning: <item> element has non-unique value in 'name' key attribute: color}, + 'expected warning issued'); + + $last_warning = ''; + $opt = XMLin($xitems, keyattr => [ 'name' ], @cont_key); + is_deeply($opt, $items, "same again but with keyattr as array"); + like($last_warning, qr{Warning: <item> element has non-unique value in 'name' key attribute: color}, + 'expected warning issued'); + + $last_warning = ''; + $^W = 0; + $opt = XMLin($xitems, keyattr => { item => 'name' }, @cont_key); + is_deeply($opt, $items, "same again"); + is($last_warning, '', 'but with no warning this time'); } Index: 9_Strict.t =================================================================== RCS file: /cvsroot/perl-xml/xml-simple/t/9_Strict.t,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- 9_Strict.t 18 May 2003 08:43:14 -0000 1.5 +++ 9_Strict.t 15 Aug 2007 10:36:48 -0000 1.6 @@ -6,7 +6,7 @@ $^W = 1; -plan tests => 38; +plan tests => 40; ############################################################################## @@ -92,6 +92,25 @@ 'with the correct error message'); +# Confirm that non-unique values in key attributes are detected + +$xml = q( +<opt> + <part partnum="12345" desc="Thingy" /> + <part partnum="67890" desc="Wotsit" /> + <part partnum="12345" desc="Springy" /> +</opt> +); + +eval { + $opt = XMLin($xml, keyattr => { part => 'partnum' }, forcearray => 1); +}; + +isnt($@, '', 'non-unique key attribute values was a fatal error'); +like($@, qr/(?i)<part> element has non-unique value in 'partnum' key attribute: 12345/, + 'with the correct error message'); + + # Confirm that stringification of references is trapped $xml = q( |
From: Grant M. <gr...@us...> - 2007-08-02 10:44:06
|
Update of /cvsroot/perl-xml/xml-simple In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv8182 Modified Files: Changes Log Message: - for 2.17 release Index: Changes =================================================================== RCS file: /cvsroot/perl-xml/xml-simple/Changes,v retrieving revision 1.30 retrieving revision 1.31 diff -u -d -r1.30 -r1.31 --- Changes 2 Aug 2007 10:40:16 -0000 1.30 +++ Changes 2 Aug 2007 10:44:07 -0000 1.31 @@ -5,7 +5,7 @@ - Added default_config_file(), and build_simple_tree() hook methods - Tweak to implementation of exporting (patch from Stuart Moore) - Documented hook methods - - Fixed test suite race condition (report from Andreas J. König) + - Fixed test suite race condition (RT#28603 from Andreas J. König) 2.16 Oct 30 2006 - Added test/fix for bad GroupTags option (report from Lee Goddard) |
From: Grant M. <gr...@us...> - 2007-08-02 10:40:51
|
Update of /cvsroot/perl-xml/xml-simple/lib/XML In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6809/lib/XML Modified Files: Simple.pm Log Message: - for 2.17 release Index: Simple.pm =================================================================== RCS file: /cvsroot/perl-xml/xml-simple/lib/XML/Simple.pm,v retrieving revision 1.38 retrieving revision 1.39 diff -u -d -r1.38 -r1.39 --- Simple.pm 6 Apr 2007 02:59:03 -0000 1.38 +++ Simple.pm 2 Aug 2007 10:40:16 -0000 1.39 @@ -53,7 +53,7 @@ @ISA = qw(Exporter); @EXPORT = qw(XMLin XMLout); @EXPORT_OK = qw(xml_in xml_out); -$VERSION = '2.16'; +$VERSION = '2.17'; $PREFERRED_PARSER = undef; my $StrictMode = 0; |
From: Grant M. <gr...@us...> - 2007-08-02 10:40:51
|
Update of /cvsroot/perl-xml/xml-simple In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6809 Modified Files: Changes todo Log Message: - for 2.17 release Index: Changes =================================================================== RCS file: /cvsroot/perl-xml/xml-simple/Changes,v retrieving revision 1.29 retrieving revision 1.30 diff -u -d -r1.29 -r1.30 --- Changes 6 Apr 2007 02:59:03 -0000 1.29 +++ Changes 2 Aug 2007 10:40:16 -0000 1.30 @@ -1,10 +1,11 @@ Revision history for Perl module XML::Simple -2.17 ??? ?? 2007 +2.17 Aug 02 2007 - Added parse_string(), parse_file() and parse_fh() methods - Added default_config_file(), and build_simple_tree() hook methods - Tweak to implementation of exporting (patch from Stuart Moore) - Documented hook methods + - Fixed test suite race condition (report from Andreas J. König) 2.16 Oct 30 2006 - Added test/fix for bad GroupTags option (report from Lee Goddard) Index: todo =================================================================== RCS file: /cvsroot/perl-xml/xml-simple/todo,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- todo 29 Jan 2007 10:17:06 -0000 1.6 +++ todo 2 Aug 2007 10:40:16 -0000 1.7 @@ -1,12 +1,13 @@ To Release ========== -- add a parse_string method? (+ parse_file / parse_fh ?) -- document hook and cache methods To Do ===== +- add hook for skipping keys on XMLout - tests for parse methods +- add a hook method for setting the name of <anon> tags - more tests for hook methods - implement exception objects - rename methods to: xml_in_(string|file|fh) - change docs to use OO style? +- support <itemdata name="x" value="y" /> form (NameValueElements => { itemdata => ['name', 'value']} ) |
From: Grant M. <gr...@us...> - 2007-08-02 10:38:24
|
Update of /cvsroot/perl-xml/xml-simple/t In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6004/t Modified Files: 3_Storable.t Log Message: - make test more robust to file mtime inaccuracies Index: 3_Storable.t =================================================================== RCS file: /cvsroot/perl-xml/xml-simple/t/3_Storable.t,v retrieving revision 1.10 retrieving revision 1.11 diff -u -d -r1.10 -r1.11 --- 3_Storable.t 29 Jan 2005 04:17:42 -0000 1.10 +++ 3_Storable.t 2 Aug 2007 10:38:22 -0000 1.11 @@ -70,6 +70,39 @@ ############################################################################## +# Delete a file - portably +# + +sub DeleteFile { + my($Filename) = @_; + + if ('VMS' eq $^O) { + 1 while (unlink($Filename)); + } else { + unlink($Filename); + } +} + + +############################################################################## +# Create a file, making sure that its timestamp is newer than another +# existing file. +# + +sub MakeNewerFile { + my($File1, $File2, $CodeRef) = @_; + + my $t0 = (stat($File1))[9]; + while(1) { + unlink($File2); + $CodeRef->(); + return if (stat($File2))[9] > $t0; + sleep(1); + } +} + + +############################################################################## # Wait until the current time is greater than the supplied value # @@ -146,19 +179,15 @@ $t2 = (stat($CacheFile))[9]; isnt($t1, $t2, 'and this time the cache timestamp has changed'); -if ('VMS' eq $^O) { - 1 while (unlink($XMLFile)); -} else { - unlink($XMLFile); -} -ok(! -e $XMLFile, 'deleted the cache file'); +DeleteFile($XMLFile); +ok(! -e $XMLFile, 'deleted the source file'); open(FILE, ">$XMLFile"); # Re-create it (empty) close(FILE); ok(-e $XMLFile, 'recreated the source file'); is(-s $XMLFile, 0, 'but with nothing in it'); -PassTime((stat($XMLFile))[9]); # But ensure cache file is newer -unlink($CacheFile); # Seems to be rqd for test on Win32 -Storable::nstore($Expected, $CacheFile); +MakeNewerFile($XMLFile, $CacheFile, sub { # Make sure cache file is newer + Storable::nstore($Expected, $CacheFile); +}); $opt = XMLin($XMLFile, cache => 'storable'); is_deeply($opt, $Expected, 'got the expected data from the cache'); $t2 = (stat($CacheFile))[9]; |
From: Grant M. <gr...@us...> - 2007-08-02 10:35:44
|
Update of /cvsroot/perl-xml/xml-simple/t In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4860/t Modified Files: 1_XMLin.t Log Message: - don't hard code expected version number Index: 1_XMLin.t =================================================================== RCS file: /cvsroot/perl-xml/xml-simple/t/1_XMLin.t,v retrieving revision 1.26 retrieving revision 1.27 diff -u -d -r1.26 -r1.27 --- 1_XMLin.t 6 Feb 2007 09:09:50 -0000 1.26 +++ 1_XMLin.t 2 Aug 2007 10:35:40 -0000 1.27 @@ -25,9 +25,15 @@ $@ = ''; eval "use XML::Simple;"; is($@, '', 'Module compiled OK'); -my $version = '2.16'; +my $version = 'unknown'; +if(open my $chg, '<Changes') { + while(<$chg>) { + last if ($version) = $_ =~ /^([\d\._]+) /; + } + close($chg); +} unless($XML::Simple::VERSION eq $version) { - diag("Warning: XML::Simple::VERSION = $XML::Simple::VERSION (expected $version)"); + diag("Warning: XML::Simple::VERSION = $XML::Simple::VERSION (Changes version: $version)"); } |
From: Grant M. <gr...@us...> - 2007-04-06 02:59:12
|
Update of /cvsroot/perl-xml/xml-simple/lib/XML In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9797/lib/XML Modified Files: Simple.pm Log Message: - reimplement exporter change Index: Simple.pm =================================================================== RCS file: /cvsroot/perl-xml/xml-simple/lib/XML/Simple.pm,v retrieving revision 1.37 retrieving revision 1.38 diff -u -d -r1.37 -r1.38 --- Simple.pm 5 Apr 2007 22:32:26 -0000 1.37 +++ Simple.pm 6 Apr 2007 02:59:03 -0000 1.38 @@ -90,14 +90,14 @@ # sub import { - # Handle the :strict tag $StrictMode = 1 if grep(/^:strict$/, @_); # Pass everything else to Exporter.pm - __PACKAGE__->export_to_level($Exporter::ExportLevel + 1, grep(!/^:strict$/, @_)); + @_ = grep(!/^:strict$/, @_); + goto &Exporter::import; } |
From: Grant M. <gr...@us...> - 2007-04-06 02:59:12
|
Update of /cvsroot/perl-xml/xml-simple In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9797 Modified Files: Changes Log Message: - reimplement exporter change Index: Changes =================================================================== RCS file: /cvsroot/perl-xml/xml-simple/Changes,v retrieving revision 1.28 retrieving revision 1.29 diff -u -d -r1.28 -r1.29 --- Changes 5 Apr 2007 22:32:26 -0000 1.28 +++ Changes 6 Apr 2007 02:59:03 -0000 1.29 @@ -3,7 +3,7 @@ 2.17 ??? ?? 2007 - Added parse_string(), parse_file() and parse_fh() methods - Added default_config_file(), and build_simple_tree() hook methods - - Use $Exporter::ExportLevel (patch from Stuart Moore) + - Tweak to implementation of exporting (patch from Stuart Moore) - Documented hook methods 2.16 Oct 30 2006 |
From: Grant M. <gr...@us...> - 2007-04-05 22:32:29
|
Update of /cvsroot/perl-xml/xml-simple In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14221 Modified Files: Changes Log Message: - use ::ExportLevel (patch from Stuart Moore) Index: Changes =================================================================== RCS file: /cvsroot/perl-xml/xml-simple/Changes,v retrieving revision 1.27 retrieving revision 1.28 diff -u -d -r1.27 -r1.28 --- Changes 29 Jan 2007 10:17:06 -0000 1.27 +++ Changes 5 Apr 2007 22:32:26 -0000 1.28 @@ -3,6 +3,7 @@ 2.17 ??? ?? 2007 - Added parse_string(), parse_file() and parse_fh() methods - Added default_config_file(), and build_simple_tree() hook methods + - Use $Exporter::ExportLevel (patch from Stuart Moore) - Documented hook methods 2.16 Oct 30 2006 |
From: Grant M. <gr...@us...> - 2007-04-05 22:32:29
|
Update of /cvsroot/perl-xml/xml-simple/lib/XML In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14221/lib/XML Modified Files: Simple.pm Log Message: - use ::ExportLevel (patch from Stuart Moore) Index: Simple.pm =================================================================== RCS file: /cvsroot/perl-xml/xml-simple/lib/XML/Simple.pm,v retrieving revision 1.36 retrieving revision 1.37 diff -u -d -r1.36 -r1.37 --- Simple.pm 29 Jan 2007 10:17:06 -0000 1.36 +++ Simple.pm 5 Apr 2007 22:32:26 -0000 1.37 @@ -97,7 +97,7 @@ # Pass everything else to Exporter.pm - __PACKAGE__->export_to_level(1, grep(!/^:strict$/, @_)); + __PACKAGE__->export_to_level($Exporter::ExportLevel + 1, grep(!/^:strict$/, @_)); } |
From: Grant M. <gr...@us...> - 2007-02-06 09:09:52
|
Update of /cvsroot/perl-xml/xml-simple/t In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3849/t Modified Files: 1_XMLin.t Log Message: - fixed reversed args (expected vs received) Index: 1_XMLin.t =================================================================== RCS file: /cvsroot/perl-xml/xml-simple/t/1_XMLin.t,v retrieving revision 1.25 retrieving revision 1.26 diff -u -d -r1.25 -r1.26 --- 1_XMLin.t 30 Oct 2006 08:28:13 -0000 1.25 +++ 1_XMLin.t 6 Feb 2007 09:09:50 -0000 1.26 @@ -1451,7 +1451,7 @@ } } }; -is_deeply($target, $opt, 'successfully read an SRT config file'); +is_deeply($opt, $target, 'successfully read an SRT config file'); exit(0); |
From: Grant M. <gr...@us...> - 2007-01-30 08:49:31
|
Update of /cvsroot/perl-xml/xml-filter-nsnormalise/t In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25971/t Modified Files: 2_more.t Log Message: - remove repeated declarations of my in same scope Index: 2_more.t =================================================================== RCS file: /cvsroot/perl-xml/xml-filter-nsnormalise/t/2_more.t,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- 2_more.t 11 Oct 2002 02:00:46 -0000 1.4 +++ 2_more.t 30 Jan 2007 08:49:29 -0000 1.5 @@ -109,7 +109,7 @@ Handler => $writer, ); -my $p = XML::SAX::ParserFactory->parser(Handler => $filter); +$p = XML::SAX::ParserFactory->parser(Handler => $filter); $@ = ''; eval {$p->parse_string(q{ @@ -164,7 +164,7 @@ Handler => $writer, ); -my $p = XML::SAX::ParserFactory->parser(Handler => $filter); +$p = XML::SAX::ParserFactory->parser(Handler => $filter); $@ = ''; eval {$p->parse_string(q{ @@ -194,7 +194,7 @@ Handler => $writer, ); -my $p = XML::SAX::ParserFactory->parser(Handler => $filter); +$p = XML::SAX::ParserFactory->parser(Handler => $filter); $@ = ''; eval {$p->parse_string(q{ @@ -238,7 +238,7 @@ Handler => $writer, ); -my $p = XML::SAX::ParserFactory->parser(Handler => $filter); +$p = XML::SAX::ParserFactory->parser(Handler => $filter); $@ = ''; eval {$p->parse_string(q{ @@ -279,7 +279,7 @@ Handler => $writer, ); -my $p = XML::SAX::ParserFactory->parser(Handler => $filter); +$p = XML::SAX::ParserFactory->parser(Handler => $filter); $@ = ''; eval {$p->parse_string(q{ |
From: Grant M. <gr...@us...> - 2007-01-30 08:01:29
|
Update of /cvsroot/perl-xml/xml-filter-nsnormalise In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7785 Modified Files: Changes Log Message: - fix date format and whitespace Index: Changes =================================================================== RCS file: /cvsroot/perl-xml/xml-filter-nsnormalise/Changes,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- Changes 11 Oct 2002 02:03:19 -0000 1.4 +++ Changes 30 Jan 2007 08:01:28 -0000 1.5 @@ -1,26 +1,26 @@ Revision history for Perl extension XML::Filter::NSNormalise. -0.04 Fri Oct 11 - - added dependency on XML::SAX 0.11 - - added dependency on XML::SAX::Writer 0.44 - - changed tests to take advantage of Test::More's diagnostics +0.04 Oct 11 2002 + - added dependency on XML::SAX 0.11 + - added dependency on XML::SAX::Writer 0.44 + - changed tests to take advantage of Test::More's diagnostics -0.03 Fri Oct 11 - - added dependency on XML::NamespaceSupport 1.08 - - skip tests which rely on XML::SAX if it doesn't work +0.03 Oct 11 2002 + - added dependency on XML::NamespaceSupport 1.08 + - skip tests which rely on XML::SAX if it doesn't work -0.02 Thu Oct 10 - - added xmlnsnorm command-line utility - - fixed fatal error on mapping to the same prefix the document already uses - - fixed typo in sample code - - added extra examples/clarifcations in POD +0.02 Oct 10 2002 + - added xmlnsnorm command-line utility + - fixed fatal error on mapping to the same prefix the document already uses + - fixed typo in sample code + - added extra examples/clarifcations in POD -0.01 Wed Oct 9 - - first release to CPAN - - added tests - - added POD - - added support for mapping prefixes on attributes - - fixed end_element handler not mapping 'Name' - - original version; created by h2xs 1.21 with options - -AX -n XML::Filter::NSNormalise +0.01 Oct 09 2002 + - first release to CPAN + - added tests + - added POD + - added support for mapping prefixes on attributes + - fixed end_element handler not mapping 'Name' + - original version; created by h2xs 1.21 with options + -AX -n XML::Filter::NSNormalise |
From: Grant M. <gr...@us...> - 2007-01-29 10:17:09
|
Update of /cvsroot/perl-xml/xml-simple/lib/XML In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1289/lib/XML Modified Files: Simple.pm Log Message: - added documentation for hook methods Index: Simple.pm =================================================================== RCS file: /cvsroot/perl-xml/xml-simple/lib/XML/Simple.pm,v retrieving revision 1.35 retrieving revision 1.36 diff -u -d -r1.35 -r1.36 --- Simple.pm 25 Jan 2007 10:21:14 -0000 1.35 +++ Simple.pm 29 Jan 2007 10:17:06 -0000 1.36 @@ -324,7 +324,7 @@ # XML. If XML::SAX is installed, the default SAX parser will be used, # otherwise XML::Parser will be used. # -# This routine expects to be passed a 'string' as argument 1 or a filename as +# This routine expects to be passed a filename as argument 1 or a 'string' as # argument 2. The 'string' might be a string of XML (passed by reference to # save memory) or it might be a reference to an IO::Handle. (This # non-intuitive mess results in part from the way XML::Parser works but that's @@ -2735,11 +2735,6 @@ will be merged with the values specified when the object was created. Values specified in a method call take precedence. -Overriding methods is a more advanced topic but might be useful if for example -you wished to provide an alternative routine for escaping character data (the -escape_value method) or for building the initial parse tree (the build_tree -method). - Note: when called as methods, the C<XMLin()> and C<XMLout()> routines may be called as C<xml_in()> or C<xml_out()>. The method names are aliased so the only difference is the aesthetics. @@ -2752,17 +2747,17 @@ =over 4 -=item parse_string +=item parse_string(text) Works exactly like the C<xml_in()> method but assumes the first argument is a string of XML (or a reference to a scalar containing a string of XML). -=item parse_file +=item parse_file(filename) Works exactly like the C<xml_in()> method but assumes the first argument is the name of a file containing XML. -=item parse_fh +=item parse_fh(file_handle) Works exactly like the C<xml_in()> method but assumes the first argument is a filehandle which can be read to get XML. @@ -2772,23 +2767,77 @@ =head2 Hook Methods You can make your own class which inherits from XML::Simple and overrides -certain behaviour. The following methods may provide useful 'hooks' upon which -to hang your modified behaviour. You may find other undocumented places by -examining the source, but those methods may change in future releases. +certain behaviours. The following methods may provide useful 'hooks' upon +which to hang your modified behaviour. You may find other undocumented methods +by examining the source, but those may be subject to change in future releases. =over 4 -=item default_config_file +=item handle_options(direction, name => value ...) + +This method will be called when one of the parsing methods or the C<XMLout()> +method is called. The initial argument will be a string (either 'in' or 'out') +and the remaining arguments will be name value pairs. + +=item default_config_file() Calculates and returns the name of the file which should be parsed if no filename is passed to C<XMLin()> (default: C<$0.xml>). -=item TODO +=item build_simple_tree(filename, string) -more here +Called from C<XMLin()> or any of the parsing methods. Takes either a file name +as the first argument or C<undef> followed by a 'string' as the second +argument. Returns a simple tree data structure. You could override this +method to apply your own transformations before the data structure is returned +to the caller. + +=item new_hashref() + +When the 'simple tree' data structure is being built, this method will be +called to create any required anonymous hashrefs. + +=item sorted_keys(name, hashref) + +Called when C<XMLout()> is translating a hashref to XML. This routine returns +a list of hash keys in the order that the corresponding attributes/elements +should appear in the output. + +=item escape_value(string) + +Called from C<XMLout()>, takes a string and returns a copy of the string with +XML character escaping rules applied. + +=item numeric_escape(string) + +Called from C<escape_value()>, to handle non-ASCII characters (depending on the +value of the NumericEscape option). + +=item copy_hash(hashref, extra_key => value, ...) + +Called from C<XMLout()>, when 'unfolding' a hash of hashes into an array of +hashes. You might wish to override this method if you're using tied hashes and +don't want them to get untied. =back +=head2 Cache Methods + +XML::Simple implements three caching schemes ('storable', 'memshare' and +'memcopy'). You can implement a custom caching scheme by implementing +two methods - one for reading from the cache and one for writing to it. + +For example, you might implement a new 'dbm' scheme that stores cached data +structures using the L<MLDBM> module. First, you would add a +C<cache_read_dbm()> method which accepted a filename for use as a lookup key +and returned a data structure on success, or undef on failure. Then, you would +implement a C<cache_read_dbm()> method which accepted a data structure and a +filename. + +You would use this caching scheme by specifying the option: + + Cache => [ 'dbm' ] + =head1 STRICT MODE If you import the B<XML::Simple> routines like this: |
From: Grant M. <gr...@us...> - 2007-01-29 10:17:09
|
Update of /cvsroot/perl-xml/xml-simple In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1289 Modified Files: Changes todo Log Message: - added documentation for hook methods Index: Changes =================================================================== RCS file: /cvsroot/perl-xml/xml-simple/Changes,v retrieving revision 1.26 retrieving revision 1.27 diff -u -d -r1.26 -r1.27 --- Changes 30 Oct 2006 08:28:12 -0000 1.26 +++ Changes 29 Jan 2007 10:17:06 -0000 1.27 @@ -1,5 +1,10 @@ Revision history for Perl module XML::Simple +2.17 ??? ?? 2007 + - Added parse_string(), parse_file() and parse_fh() methods + - Added default_config_file(), and build_simple_tree() hook methods + - Documented hook methods + 2.16 Oct 30 2006 - Added test/fix for bad GroupTags option (report from Lee Goddard) - Added new_hashref() hook method Index: todo =================================================================== RCS file: /cvsroot/perl-xml/xml-simple/todo,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- todo 28 Nov 2006 01:49:34 -0000 1.5 +++ todo 29 Jan 2007 10:17:06 -0000 1.6 @@ -1,9 +1,12 @@ To Release ========== +- add a parse_string method? (+ parse_file / parse_fh ?) +- document hook and cache methods To Do ===== +- tests for parse methods +- more tests for hook methods - implement exception objects -- add methods: xml_in_(string|file|fh) -- change docs to use OO style - +- rename methods to: xml_in_(string|file|fh) +- change docs to use OO style? |
From: Grant M. <gr...@us...> - 2007-01-25 10:21:17
|
Update of /cvsroot/perl-xml/xml-simple/lib/XML In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7898/lib/XML Modified Files: Simple.pm Log Message: - refactor XMLin() to use new public methods parse_string, parse_file and parse_fh - begin documentation of hook methods Index: Simple.pm =================================================================== RCS file: /cvsroot/perl-xml/xml-simple/lib/XML/Simple.pm,v retrieving revision 1.34 retrieving revision 1.35 diff -u -d -r1.34 -r1.35 --- Simple.pm 30 Oct 2006 08:28:13 -0000 1.34 +++ Simple.pm 25 Jan 2007 10:21:14 -0000 1.35 @@ -148,6 +148,7 @@ return $self; } + ############################################################################## # Sub/Method: XMLin() # @@ -162,88 +163,158 @@ sub XMLin { my $self = &_get_object; # note, @_ is passed implicitly - my $string = shift; + my $target = shift; - $self->handle_options('in', @_); + # Work out whether to parse a string, a file or a filehandle - # If no XML or filename supplied, look for scriptname.xml in script directory + if(not defined $target) { + return $self->parse_file(undef, @_); + } - unless(defined($string)) { - - # Translate scriptname[.suffix] to scriptname.xml + elsif($target eq '-') { + local($/) = undef; + $target = <STDIN>; + return $self->parse_string(\$target, @_); + } - require File::Basename; + elsif(my $type = ref($target)) { + if($type eq 'SCALAR') { + return $self->parse_string($target, @_); + } + else { + return $self->parse_fh($target, @_); + } + } - my($ScriptName, $ScriptDir, $Extension) = - File::Basename::fileparse($0, '\.[^\.]+'); + elsif($target =~ m{<.*?>}s) { + return $self->parse_string(\$target, @_); + } - $string = $ScriptName . '.xml'; + else { + return $self->parse_file($target, @_); + } +} - # Add script directory to searchpath - - if($ScriptDir) { - unshift(@{$self->{opt}->{searchpath}}, $ScriptDir); - } - } - +############################################################################## +# Sub/Method: parse_file() +# +# Same as XMLin, but only parses from a named file. +# - # Are we parsing from a file? If so, is there a valid cache available? +sub parse_file { + my $self = &_get_object; # note, @_ is passed implicitly - my($filename, $scheme); - unless($string =~ m{<.*?>}s or ref($string) or $string eq '-') { + my $filename = shift; - require File::Basename; - require File::Spec; + $self->handle_options('in', @_); - $filename = $self->find_xml_file($string, @{$self->{opt}->{searchpath}}); + $filename = $self->default_config_file if not defined $filename; - if($self->{opt}->{cache}) { - foreach $scheme (@{$self->{opt}->{cache}}) { - my $method = 'cache_read_' . $scheme; - my $opt = $self->$method($filename); - return($opt) if($opt); - } + $filename = $self->find_xml_file($filename, @{$self->{opt}->{searchpath}}); + + # Check cache for previous parse + + if($self->{opt}->{cache}) { + foreach my $scheme (@{$self->{opt}->{cache}}) { + my $method = 'cache_read_' . $scheme; + my $opt = $self->$method($filename); + return($opt) if($opt); } } - else { - delete($self->{opt}->{cache}); - if($string eq '-') { - # Read from standard input - local($/) = undef; - $string = <STDIN>; - } + my $ref = $self->build_simple_tree($filename, undef); + + if($self->{opt}->{cache}) { + my $method = 'cache_write_' . $self->{opt}->{cache}->[0]; + $self->$method($ref, $filename); } + return $ref; +} - # Parsing is required, so let's get on with it - my $tree = $self->build_tree($filename, ref($string) ? $string : \$string); - undef($string); +############################################################################## +# Sub/Method: parse_fh() +# +# Same as XMLin, but only parses from a filehandle. +# - # Now work some magic on the resulting parse tree +sub parse_fh { + my $self = &_get_object; # note, @_ is passed implicitly - my($ref); - if($self->{opt}->{keeproot}) { - $ref = $self->collapse({}, @$tree); - } - else { - $ref = $self->collapse(@{$tree->[1]}); - } + my $fh = shift; + croak "Can't use " . (defined $fh ? qq{string ("$fh")} : 'undef') . + " as a filehandle" unless ref $fh; - if($self->{opt}->{cache}) { - my $method = 'cache_write_' . $self->{opt}->{cache}->[0]; - $self->$method($ref, $filename); + $self->handle_options('in', @_); + + return $self->build_simple_tree(undef, $fh); +} + + +############################################################################## +# Sub/Method: parse_string() +# +# Same as XMLin, but only parses from a string or a reference to a string. +# + +sub parse_string { + my $self = &_get_object; # note, @_ is passed implicitly + + my $string = shift; + + $self->handle_options('in', @_); + + return $self->build_simple_tree(undef, ref $string ? $string : \$string); +} + + +############################################################################## +# Method: default_config_file() +# +# Returns the name of the XML file to parse if no filename (or XML string) +# was provided. +# + +sub default_config_file { + my $self = shift; + + require File::Basename; + + my($basename, $script_dir, $ext) = File::Basename::fileparse($0, '\.[^\.]+'); + + # Add script directory to searchpath + + if($script_dir) { + unshift(@{$self->{opt}->{searchpath}}, $script_dir); } - return($ref); + return $basename . '.xml'; } ############################################################################## -#Method: build_tree() +# Method: build_simple_tree() +# +# Builds a 'tree' data structure as provided by XML::Parser and then +# 'simplifies' it as specified by the various options in effect. +# + +sub build_simple_tree { + my $self = shift; + + my $tree = $self->build_tree(@_); + + return $self->{opt}->{keeproot} + ? $self->collapse({}, @$tree) + : $self->collapse(@{$tree->[1]}); +} + + +############################################################################## +# Method: build_tree() # # This routine will be called if there is no suitable pre-parsed tree in a # cache. It parses the XML and returns an XML::Parser 'Tree' style data @@ -846,8 +917,10 @@ my @search_path = @_; - my($filename, $filedir) = - File::Basename::fileparse($file); + require File::Basename; + require File::Spec; + + my($filename, $filedir) = File::Basename::fileparse($file); if($filename ne $file) { # Ignore searchpath if dir component return($file) if(-e $file); @@ -2671,6 +2744,51 @@ called as C<xml_in()> or C<xml_out()>. The method names are aliased so the only difference is the aesthetics. +=head2 Parsing Methods + +You can explicitly call one of the following methods rather than rely on the +C<xml_in()> method automatically determining whether the target to be parsed is +a string, a file or a filehandle: + +=over 4 + +=item parse_string + +Works exactly like the C<xml_in()> method but assumes the first argument is +a string of XML (or a reference to a scalar containing a string of XML). + +=item parse_file + +Works exactly like the C<xml_in()> method but assumes the first argument is +the name of a file containing XML. + +=item parse_fh + +Works exactly like the C<xml_in()> method but assumes the first argument is +a filehandle which can be read to get XML. + +=back + +=head2 Hook Methods + +You can make your own class which inherits from XML::Simple and overrides +certain behaviour. The following methods may provide useful 'hooks' upon which +to hang your modified behaviour. You may find other undocumented places by +examining the source, but those methods may change in future releases. + +=over 4 + +=item default_config_file + +Calculates and returns the name of the file which should be parsed if no +filename is passed to C<XMLin()> (default: C<$0.xml>). + +=item TODO + +more here + +=back + =head1 STRICT MODE If you import the B<XML::Simple> routines like this: |
From: Grant M. <gr...@us...> - 2006-11-28 01:49:41
|
Update of /cvsroot/perl-xml/xml-simple In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4561 Modified Files: todo Log Message: - more ideas Index: todo =================================================================== RCS file: /cvsroot/perl-xml/xml-simple/todo,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- todo 30 Oct 2006 08:28:12 -0000 1.4 +++ todo 28 Nov 2006 01:49:34 -0000 1.5 @@ -3,4 +3,7 @@ To Do ===== -- add a parse_string method? +- implement exception objects +- add methods: xml_in_(string|file|fh) +- change docs to use OO style + |
From: Petr P. <pa...@us...> - 2006-11-21 12:23:34
|
Update of /cvsroot/perl-xml/XML-LibXML-XPathContext In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24157 Added Files: DO_NOT_HACK_HERE_MODULE_MERGED_WITH_XML_LIBXML Log Message: Module merged with XML::LibXML, use this CVS no more! --- NEW FILE: DO_NOT_HACK_HERE_MODULE_MERGED_WITH_XML_LIBXML --- WARNING - THIS MODULE DISTRIBUTION IS OBSOLETE! ----------------------------------------------- XML::LibXML::XPathContext has merged with XML::LibXML as of 1.60. Do not use this version. Development versions of XML::LibXML are currently (2006-11-21) in SVN (Subversion) repository: To annonymously check out from the SVN repository, use * trunk and branches: svn co svn://axkit.org/XML-LibXML * only trunk to a local directory 'XML-LibXML-trunk': svn co svn://axkit.org/XML-LibXML/trunk XML-LibXML-trunk For more information about Subversion, visit http://subversion.tigris.org. |
From: Grant M. <gr...@us...> - 2006-11-14 08:39:31
|
Update of /cvsroot/perl-xml/perl-xml-faq In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1566 Modified Files: perl-xml-faq.xml Log Message: - minor wording tweaks Index: perl-xml-faq.xml =================================================================== RCS file: /cvsroot/perl-xml/perl-xml-faq/perl-xml-faq.xml,v retrieving revision 1.25 retrieving revision 1.26 diff -u -d -r1.25 -r1.26 --- perl-xml-faq.xml 13 Nov 2006 23:07:15 -0000 1.25 +++ perl-xml-faq.xml 14 Nov 2006 08:39:28 -0000 1.26 @@ -722,11 +722,11 @@ <para>This module implements a SAX2 interface around the expat library, so it's fast, stable and complete. XML::SAX::Expat doesn't link expat directly but through <classname>XML::Parser</classname>. Hence, this - module requires <classname>XML::Parser</classname>, and doesn't to - compile any XS code on installation. If you've just installed - <classname>XML::SAX</classname> and <classname>XML::Parser</classname> - you'll want to install this module to improve on the speed and encoding - support offered by <classname>XML::SAX::PurePerl</classname>.</para> + module requires <classname>XML::Parser</classname>, and doesn't compile + any XS code on installation. If you have <classname>XML::SAX</classname> + and <classname>XML::Parser</classname> installed, you'll want to install + this module to improve on the speed and encoding support offered by + <classname>XML::SAX::PurePerl</classname>.</para> <para>Robin Berjon is the author of this module although he claims to have stolen the code from Ken MacLeod.</para> @@ -747,7 +747,7 @@ no dependence on <classname>XML::Parser</classname> but either some XS code must be compiled or a binary package installed.</para> - <para>This module has been started by Matt Sergeant and completed by + <para>This module was started by Matt Sergeant and completed by Petr Cimprich.</para> </answer> @@ -759,12 +759,12 @@ </question> <answer> - <para>The <classname>XML::SAX::Writer</classname> module is a common - and stable XML writer for the SAX2 interface. This module can receive + <para>The <classname>XML::SAX::Writer</classname> module is used to + generate XML output from a SAX2 pipeline. This module can receive pluggable consumer and encoder objects. The default encoder is based on <classname>Text::Iconv</classname>.</para> - <para><classname>XML::SAX::Writer</classname> has been created by + <para><classname>XML::SAX::Writer</classname> was created by Robin Berjon.</para> </answer> |
From: Petr C. <pci...@us...> - 2006-11-13 23:07:20
|
Update of /cvsroot/perl-xml/perl-xml-faq In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20022 Modified Files: perl-xml-faq.xml Log Message: more info on SAX2 modules Index: perl-xml-faq.xml =================================================================== RCS file: /cvsroot/perl-xml/perl-xml-faq/perl-xml-faq.xml,v retrieving revision 1.24 retrieving revision 1.25 diff -u -d -r1.24 -r1.25 --- perl-xml-faq.xml 6 Nov 2006 08:26:32 -0000 1.24 +++ perl-xml-faq.xml 13 Nov 2006 23:07:15 -0000 1.25 @@ -720,12 +720,13 @@ <answer> <para>This module implements a SAX2 interface around the expat library, - so it's fast, stable and complete. Current versions of this module - require <classname>XML::Parser</classname> but a release which links - directly to expat is imminent. If you've just installed - <classname>XML::SAX</classname> you'll want to install this module to - improve on the speed and encoding support offered by - <classname>XML::SAX::PurePerl</classname>.</para> + so it's fast, stable and complete. XML::SAX::Expat doesn't link expat + directly but through <classname>XML::Parser</classname>. Hence, this + module requires <classname>XML::Parser</classname>, and doesn't to + compile any XS code on installation. If you've just installed + <classname>XML::SAX</classname> and <classname>XML::Parser</classname> + you'll want to install this module to improve on the speed and encoding + support offered by <classname>XML::SAX::PurePerl</classname>.</para> <para>Robin Berjon is the author of this module although he claims to have stolen the code from Ken MacLeod.</para> @@ -733,6 +734,42 @@ </answer> </qandaentry> + <qandaentry id="xml_sax_expatxs"> + <question> + <para><classname>XML::SAX::ExpatXS</classname></para> + </question> + <answer> + + <para>This module, analogous to <classname>XML::SAX::Expat</classname>, + implements a SAX2 interface around the expat library but it links + expat directly. This is why <classname>XML::SAX::ExpatXS</classname> + is even faster than <classname>XML::SAX::Expat</classname>. There is + no dependence on <classname>XML::Parser</classname> but either some XS + code must be compiled or a binary package installed.</para> + + <para>This module has been started by Matt Sergeant and completed by + Petr Cimprich.</para> + + </answer> + </qandaentry> + + <qandaentry id="xml_sax_writer"> + <question> + <para><classname>XML::SAX::Writer</classname></para> + </question> + <answer> + + <para>The <classname>XML::SAX::Writer</classname> module is a common + and stable XML writer for the SAX2 interface. This module can receive + pluggable consumer and encoder objects. The default encoder is based + on <classname>Text::Iconv</classname>.</para> + + <para><classname>XML::SAX::Writer</classname> has been created by + Robin Berjon.</para> + + </answer> + </qandaentry> + <qandaentry id="xml_sax_machines"> <question> <para><classname>XML::SAX::Machines</classname></para> |