# HG changeset patch # User Sergey # Date 1251668263 -14400 # Node ID 955b2324c1bf1bb73f1609a1a7dbdbc0f3345ee0 # Parent 63f6653b094e29118f68d0c0013f69d49c6f5437 Работа над навигаторами и схемой DOM модели diff -r 63f6653b094e -r 955b2324c1bf Lib/IMPL/DOM/Navigator.pm --- a/Lib/IMPL/DOM/Navigator.pm Fri Aug 28 16:26:20 2009 +0400 +++ b/Lib/IMPL/DOM/Navigator.pm Mon Aug 31 01:37:43 2009 +0400 @@ -2,9 +2,7 @@ use strict; use warnings; -require Exporter; -our @ISA = qw(Exporter); -our @EXPORT_OK = qw(); +use base qw(IMPL::Object); diff -r 63f6653b094e -r 955b2324c1bf Lib/IMPL/DOM/Navigator/Builder.pm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Lib/IMPL/DOM/Navigator/Builder.pm Mon Aug 31 01:37:43 2009 +0400 @@ -0,0 +1,38 @@ +package IMPL::DOM::Navigator::Builder; +use strict; +use warnings; + +use base qw(IMPL::DOM::Navigator); + +use IMPL::Class::Property; + +BEGIN { + public property SchemaNavigator => prop_get | owner_set; +} + +1; + +=pod + +=head1 SYNOPSIS + +my $nav = new IMPL::DOM::Navigator::Builder(Schema => $mySchema); + +# set position to root +$nav->InitRoot(); + +# go to node 'Person' and create one if not exists +$nav->NavigateAuto("Person"); + +# set some node properties +$nav->nodeCurrent->Name("Smith"); +$nav->nodeCurrent->Age("20"); + +# navigate to node 'Address' and create one if not exists +$nav->NavigateAuto("Address"); + +=head1 DESCRIPTION + +, + +=cut \ No newline at end of file diff -r 63f6653b094e -r 955b2324c1bf Lib/IMPL/DOM/XMLReader.pm --- a/Lib/IMPL/DOM/XMLReader.pm Fri Aug 28 16:26:20 2009 +0400 +++ b/Lib/IMPL/DOM/XMLReader.pm Mon Aug 31 01:37:43 2009 +0400 @@ -26,10 +26,25 @@ $parser->parse($in); } +sub ParseFile { + my ($this,$in) = @_; + + my $parser = new XML::Parser( + Handlers => { + Start => sub {shift; goto &OnStart($this,@_)}, + End => sub {shift; goto &OnEnd($this,@_)}, + Char => sub {shift; goto &OnChar($this,@_)} + } + ); + + $parser->parsefile($in); +} + + sub OnBegin { my ($this,$element,%attrs) = @_; - $this->{$_current} = $this->Navigator->CreateAndNavigate($element,%attrs); + $this->{$_current} = $this->Navigator->NavigateCreate($element,%attrs); } sub OnEnd { @@ -45,3 +60,21 @@ } 1; + +__END__ + +=pod + +=head1 SYNOPSIS + +my $reader = new IMPL::DOM::XMLReader(Navigator => $DomBuilder); +my $obj = $reader->parsefile("data.xml"); + +=head2 DESCRIPTION + + , . + . + + C C + +=cut diff -r 63f6653b094e -r 955b2324c1bf _test/Resources/test.schema --- a/_test/Resources/test.schema Fri Aug 28 16:26:20 2009 +0400 +++ b/_test/Resources/test.schema Mon Aug 31 01:37:43 2009 +0400 @@ -1,8 +1,10 @@ + + diff -r 63f6653b094e -r 955b2324c1bf impl.kpf --- a/impl.kpf Fri Aug 28 16:26:20 2009 +0400 +++ b/impl.kpf Mon Aug 31 01:37:43 2009 +0400 @@ -118,6 +118,32 @@ + + + + + + 9011 + + + Lib/IMPL/DOM/Navigator/Builder.pm + + Perl + + + + application/x-www-form-urlencoded + GET + 1 + 0 + 0 + + + enabled + + + default + @@ -144,6 +170,32 @@ default + + + + + + 9011 + + + Lib/IMPL/DOM/XMLReader.pm + + Perl + + + + application/x-www-form-urlencoded + GET + 1 + 0 + 0 + + + enabled + + + default +