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 )