Embedix-ECD
view release on metacpan or search on metacpan
lib/Embedix/ECD/XMLv1.pm view on Meta::CPAN
} else {
$xml .= xml_for_attribute($i, $indent, $shift);
}
}
}
return $xml;
}
# a mix-in for Embedix::ECD (and eventually Embedix::ECD::Node)
#______________________________________________________________________________
package Embedix::ECD;
use IO::File;
use XML::Parser;
# theoretically, this allows me to keep the
# parsing of XML documents threadable. The
# reason is because $cons is not a global.
#_______________________________________
sub handler_list {
print "init\n";
my $cons = [ ];
my $i = 0;
my @handler;
my @tag_stack;
# start
#_______________________________________
push @handler, 'Start', sub {
my $xp = shift;
my $tag = shift;
return if ($tag eq 'ecd');
push(@tag_stack, $tag);
my $node = [ $tag, undef ];
$cons->[$i++] = $node;
print "<$tag>\n";
};
# end
#_______________________________________
push @handler, 'End', sub {
my $xp = shift;
my $tag = shift;
return if ($tag eq 'ecd');
# XXX : expat may have already checked this for me
if ($tag_stack[-1] eq $tag) {
} else {
}
print "</$tag>\n";
};
# pcdata
#_______________________________________
push @handler, 'Char', sub {
my $xp = shift;
print "char $_[0]\n";
};
# final release
#_______________________________________
push @handler, 'Final', sub {
my $xp = shift;
print "final\n";
return $cons;
};
return @handler;
}
#_______________________________________
sub xml_parser {
# construct a new parser
my $p = XML::Parser->new( Handlers => { handler_list() } );
return $p
}
#_______________________________________
sub consFromXMLFile {
my $class = shift;
my $filename = shift;
my $p = Embedix::ECD->xml_parser;
my $xml_file = IO::File->new($filename);
my $cons = $p->parse($xml_file);
return $cons;
}
#_______________________________________
sub newFromXMLFile {
my $class = shift;
my $filename = shift;
}
#_______________________________________
sub toXML {
my $self = shift;
my $opt = $self->getFormatOptions(@_);
my $dtd;
$opt->{dtd} && do {
if ($opt->{dtd} eq "yes") {
$dtd = qq(<!DOCTYPE ecd SYSTEM "ecd_v1.dtd">\n);
} elsif ($opt->{dtd} eq "embed") {
$dtd = qq(<!DOCTYPE ecd [\n$Embedix::ECD::XMLv1::__dtd]>);
} elsif ($opt->{dtd} eq "no") {
$dtd = "";
} else {
die "dtd => $opt->{dtd} is not a valid option for toXML()\n";
}
};
if ($self->getDepth == 0) {
return
( run in 0.776 second using v1.01-cache-2.11-cpan-6aa56a78535 )