simplexmlparse
view release on metacpan or search on metacpan
lib/simpleXMLParse.pm view on Meta::CPAN
);
$VERSION = '3.1';
use Carp;
use strict;
no warnings;
#use open ':encoding(utf8)';
my @cdata;
my $cdataInd = 0;
my $MAXIND = 10000;
sub new {
my $class = shift;
my %args = (@_ == 1) ? ((ref($_[0]) eq 'HASH') ? %{$_[0]}:(input => $_[0])):@_;
my $altstyle = 0;
my $fn;
$fn = $args{"input"};
$altstyle = 1 if ($args{"style"} eq '2');
my $self = {};
lib/simpleXMLParse.pm view on Meta::CPAN
open(INFILE, '<:encoding(UTF-8)', "$fn") or croak "Unable to process [$fn] $!\n";
$self->{"xml"} = join '', <INFILE>;
}
}
close(INFILE);
$self->{"data"} = _ParseXML( $self->{"xml"}, $altstyle );
my $ret = bless $self;
if ($altstyle) {
$ret->_convertToStyle();
}
$cdataInd = $cdataInd % $MAXIND;
return $ret;
}
sub parse {
my $self = shift;
return $self->{data};
}
sub _convertToStyle {
my $self = shift;
lib/simpleXMLParse.pm view on Meta::CPAN
} else {
if (ref($i) eq "ARRAY") {
foreach my $j (@$i) {
push @recursearr, $j;
}
}
}
}
}
sub _cdatasub {
my $cdata = shift;
my $tmpind = $cdataInd++;
$cdata[$tmpind] = $cdata;
return "0x0CDATA0x0".($tmpind)."0x0";
}
sub _cdatasubout {
my $ind = shift;
my $cdata = $cdata[$ind];
return $cdata;
}
sub _unescp {
my $firsttag = shift;
$firsttag =~ s/\\\\/\\/gs;
$firsttag =~ s/\\\*/\*/gs;
$firsttag =~ s/\\\|/\|/gs;
$firsttag =~ s/\\\$/\$/gs;
$firsttag =~ s/\\\?/\?/gs;
$firsttag =~ s/\\\{/\{/gs;
lib/simpleXMLParse.pm view on Meta::CPAN
$text =~ s/\&\;/\&/g;
$text =~ s/\&apos\;/\'/g;
$text =~ s/\"\;/\"/g;
$text =~ s/\&\#x([0-9a-fA-F]+)\;/&hconv($1)/ge;
return $text;
}
sub _ParseXML {
my ($xml, $altstyle) = @_;
# $xml =~ s/\n//g;
$xml =~ s/\<\!\[CDATA\[(.*?)\]\]\>/&_cdatasub($1)/egs;
$xml =~ s/\<\!\-\-.*?\-\-\>//gs;
$xml =~ s/\<\?xml.*?\?\>//gs;
$xml =~ s/\<\?[^\>]*?\?\>//gs;
$xml =~ s/\<\!\-\-[^\>]*?\-\-\>//gs;
$xml =~ s/\<\!ELEMENT[^\>]*?\>//gs;
$xml =~ s/\<\!ENTITY[^\>]*?\>//gs;
$xml =~ s/\<\!ATTLIST[^\>]*?\>//gs;
$xml =~ s/\<\!DOCTYPE[^\>]*?\>//gs;
my $rethash = ();
my @retarr;
lib/simpleXMLParse.pm view on Meta::CPAN
}
else {
if ( $xml =~ /^[\s\n]*\<${firsttag}(\/\>|[\s\n][^\>]*\/\>)(.*)$/s ) {
$attr = $1;
$innerxml = "";
$xmlfragment = $2;
$attr =~ s/\/\>$//gs;
} else {
if (!ref($xml)) {
$xml = _entity($xml);
$xml =~ s/0x0CDATA0x0(\d+?)0x0/&_cdatasubout($1)/egs;
}
if ($xml eq '') {
return {};
} else {
return $xml;
}
}
}
my $ixml = $innerxml;
while ($ixml =~ /^.*?\<${firsttag}(\>|[\s\n]\>|[\s\n][^\>]*[^\/]\>)(.*?)$/s) {
( run in 0.356 second using v1.01-cache-2.11-cpan-ec4f86ec37b )