XML::LibXML::SAX::ChunkParser - Parse XML Chunks Via LibXML SAX


XML-LibXML-SAX-ChunkParser documentation Contained in the XML-LibXML-SAX-ChunkParser distribution.

Index


Code Index:

NAME

Top

XML::LibXML::SAX::ChunkParser - Parse XML Chunks Via LibXML SAX

SYNOPSIS

Top

  local $XML::SAX::ParserPackage = 'XML::LibXML::SAX::ChunkParser';
  my $parser = XML::SAX::ParserFactory->new(Handler => $myhandler);

  $parser->parse_chunk($xml_chunk);

DESCRIPTION

Top

XML::LibXML::SAX::ChunkParser uses XML::LibXML's parse_chunk (as opposed to parse_xml_chunk/parse_balanced_chunk), which XML::LibXML::SAX uses.

Its purpose is to simply keep parsing possibly incomplete XML fragments, for example, from a socket.

METHODS

Top

parse_chunk

Parses possibly incomplete XML fragment

finish

Explicitly tell the parser that we're done parsing

AUTHOR

Top

Daisuke Maki <daisuke@endeworks.jp>

LICENSE

Top

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

See http://www.perl.com/perl/misc/Artistic.html


XML-LibXML-SAX-ChunkParser documentation Contained in the XML-LibXML-SAX-ChunkParser distribution.

# $Id: /mirror/coderepos/lang/perl/XML-LibXML-SAX-ChunkParser/trunk/lib/XML/LibXML/SAX/ChunkParser.pm 87623 2008-10-09T08:23:46.440905Z daisuke  $

package XML::LibXML::SAX::ChunkParser;
use strict;
use base qw(XML::SAX::Base);
use XML::LibXML;
use Carp qw(croak);

our $VERSION = '0.00003';

sub parse_chunk {
    my ($self, $chunk) = @_;
    my $options = $self->{ParserOptions};
    if (! $options) {
        $options = {};
        $options->{LibParser} = XML::LibXML->new;
        $self->{ParserOptions} = $options;
    }
    my $parser = $options->{LibParser};
    $parser->set_handler($self);

    eval {
        $parser->parse_chunk( $chunk );
    };

    if ( $parser->{SAX}->{State} == 1 ) {
        croak( "SAX Exception not implemented, yet; Data ended before document ended\n" );
    }

    # break a possible circular reference    
    $parser->set_handler( undef );
    if ( $@ ) {
        croak $@;
    }
}

sub finish {
    my $self = shift;
    my $options = $self->{ParserOptions};
    if (! $options) {
        $options->{LibParser} = XML::LibXML->new;
    }
    my $parser = $options->{LibParser};
    if ($parser) {
        $parser->parse_chunk("", 1);
    }
}

1;

__END__