XML-Parser-Lite-Tree

 view release on metacpan or  search on metacpan

MANIFEST  view on Meta::CPAN

MANIFEST
README
t/00_xmlparserlite.t
t/01_basic.t
t/02_options.t
t/03_comments.t
t/04_processing_instructions.t
t/05_doctypes.t
t/06_attributes.t
t/07_stack.t
t/08_cdata.t
lib/XML/Parser/LiteCopy.pm
lib/XML/Parser/Lite/Tree.pm
META.yml                                 Module meta-data (added by MakeMaker)

lib/XML/Parser/Lite/Tree.pm  view on Meta::CPAN

	my $class = shift;
	my $self = bless {}, $class;

	my %opts = (ref $_[0]) ? ((ref $_[0] eq 'HASH') ? %{$_[0]} : () ) : @_;
	$self->{opts} = \%opts;

	$self->{__parser} = new XML::Parser::LiteCopy
		Handlers => {
			Start	=> sub { $self->_start_tag(@_); },
			Char	=> sub { $self->_do_char(@_); },
			CData	=> sub { $self->_do_cdata(@_); },
			End	=> sub { $self->_end_tag(@_); },
			Comment	=> sub { $self->_do_comment(@_); },
			PI	=> sub { $self->_do_pi(@_); },
			Doctype	=> sub { $self->_do_doctype(@_); },
		};
	$self->{process_ns} = $self->{opts}->{process_ns} || 0;
	$self->{skip_white} = $self->{opts}->{skip_white} || 0;

	return $self;
}

lib/XML/Parser/Lite/Tree.pm  view on Meta::CPAN

		my $new_tag = {
			'type' => 'text',
			'content' => $content,
		};

		push @{$self->{tag_stack}->[-1]->{children}}, $new_tag;
	}
	1;
}

sub _do_cdata {
	my $self = shift;
	shift;

	for my $content(@_){

		my $new_tag = {
			'type' => 'cdata',
			'content' => $content,
		};

		push @{$self->{tag_stack}->[-1]->{children}}, $new_tag;
	}
	1;
}

sub _end_tag {
	my $self = shift;

lib/XML/Parser/LiteCopy.pm  view on Meta::CPAN

    # 3 : MarkupSPE / DeclCE / CDATA_CE
    # 4 : MarkupSPE / DeclCE / DocTypeCE
    # 5 : MarkupSPE / PI_CE
    # 6 : MarkupSPE / EndTagCE
    # 7+: MarkupSPE / ElemTagCE

    my $Until2Hyphens = "(?:[^-]*)-(?:[^-]+-)*-";
    my $CommentCE = "($Until2Hyphens)(?{${package}::comment(\$2)})>?";

    my $UntilRSBs = "[^\\]]*](?:[^\\]]+])*]+";
    my $CDATA_CE = "($UntilRSBs(?:[^\\]>]$UntilRSBs)*)(?{${package}::cdata(\$3)})>";

    my $S = "[ \\n\\t\\r]+";
    my $NameStrt = "[A-Za-z_:]|[^\\x00-\\x7F]";
    my $NameChar = "[A-Za-z0-9_:.-]|[^\\x00-\\x7F]";
    my $Name = "(?:$NameStrt)(?:$NameChar)*";
    my $QuoteSE = "\"[^\"]*\"|'[^']*'";
    my $DT_IdentSE = "$Name(?:$S(?:$Name|$QuoteSE))*";
    my $MarkupDeclCE = "(?:[^\\]\"'><]+|$QuoteSE)*>";
    my $S1 = "[\\n\\r\\t ]";
    my $UntilQMs = "[^?]*\\?+";

lib/XML/Parser/LiteCopy.pm  view on Meta::CPAN


sub comment {
    Comment(__PACKAGE__, substr $_[0], 0, -2);
}

sub end {
     pop(@stack) eq $_[0] or return _error("mismatched tag '$_[0]'");
     End(__PACKAGE__, $_[0]);
}

sub cdata {
    return _error("CDATA outside of tag stack") unless @stack;
    CData(__PACKAGE__, substr $_[0], 0, -2);
}

sub _doctype {
    Doctype(__PACKAGE__, $_[0]);
}

sub _pi {
    PI(__PACKAGE__, substr $_[0], 0, -1);

t/08_cdata.t  view on Meta::CPAN

use Test::More tests => 4;

use XML::Parser::Lite::Tree;
my $x = XML::Parser::Lite::Tree->instance();

my $tree = $x->parse('<foo><![CDATA[MethodUndefined]]></foo>');

is(&get_node($tree, '0')->{type}, 'element');
is(&get_node($tree, '0')->{name}, 'foo');

is(&get_node($tree, '0/0')->{type}, 'cdata');
is(&get_node($tree, '0/0')->{content}, 'MethodUndefined');






#
# a super-simple xpath-like function for finding a single given child
#



( run in 0.610 second using v1.01-cache-2.11-cpan-454fe037f31 )