XML-Parser-Lite-Tree
view release on metacpan or search on metacpan
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 )