| 49 | 1 #!/usr/bin/perl -w | 
|  | 2 use strict; | 
|  | 3 use lib '..\Lib'; | 
|  | 4 | 
|  | 5 require IMPL::DOM::Navigator::SimpleBuilder; | 
|  | 6 require IMPL::DOM::XMLReader; | 
| 103 | 7 require IMPL::DOM::Schema; | 
| 49 | 8 | 
|  | 9 my $builder = IMPL::DOM::Navigator::SimpleBuilder->new(); | 
|  | 10 | 
|  | 11     use Time::HiRes qw(gettimeofday tv_interval); | 
|  | 12 | 
|  | 13     my $t = [gettimeofday]; | 
|  | 14 | 
|  | 15     $builder->NavigateCreate('personInfo', version => '1'); | 
|  | 16         $builder->NavigateCreate('firstName')->nodeValue('Nemo'); | 
|  | 17         $builder->Back(); | 
|  | 18         $builder->NavigateCreate('lastName')->nodeValue('Nobel'); | 
|  | 19         $builder->Back(); | 
|  | 20         $builder->NavigateCreate('lastName')->nodeValue('Gardum'); | 
|  | 21         $builder->Back(); | 
|  | 22         for(my $i = 0 ; $i < 10000; $i++) { | 
|  | 23             $builder->NavigateCreate('address', local => 1); | 
|  | 24                 $builder->NavigateCreate('street')->nodeValue('Hellroad'); | 
|  | 25                 $builder->Back(); | 
|  | 26                 $builder->NavigateCreate('line')->nodeValue($_); | 
|  | 27                 $builder->Back(); | 
|  | 28             $builder->Back(); | 
|  | 29         } | 
|  | 30     $builder->Back(); | 
|  | 31 | 
|  | 32     print "Build: ",tv_interval($t,[gettimeofday]),"\n"; | 
|  | 33 | 
|  | 34     $t = [gettimeofday]; | 
|  | 35 | 
|  | 36     my $doc = new IMPL::DOM::Document(nodeName => 'doc'); | 
|  | 37     for(my $i = 0 ; $i < 30000; $i++) { | 
|  | 38         my $node = new IMPL::DOM::Node(nodeName => 'test'); | 
|  | 39         $node->nodeValue(100); | 
|  | 40         $doc->appendChild($node); | 
|  | 41     } | 
|  | 42 | 
|  | 43     print "Create 30000 nodes: ",tv_interval($t,[gettimeofday]),"\n"; | 
|  | 44 | 
|  | 45     $t = [gettimeofday]; | 
|  | 46     $builder = IMPL::DOM::Navigator::SimpleBuilder->new(); | 
|  | 47     my $reader = IMPL::DOM::XMLReader->new( Navigator => $builder ); | 
|  | 48 | 
|  | 49     $reader->ParseFile("Resources/large.xml"); | 
|  | 50     print "Parsing large Xml file: ",tv_interval($t,[gettimeofday]),"\n"; | 
|  | 51 | 
|  | 52     my $count = selectAll($builder->Document); | 
|  | 53     my $len = length $builder->Document->text; | 
|  | 54     print "Total nodes loaded: $count, data length: $len\n"; | 
|  | 55 | 
|  | 56     $t = [gettimeofday]; | 
|  | 57     $builder = IMPL::DOM::Navigator::SimpleBuilder->new(); | 
|  | 58     my $reader2 = IMPL::DOM::XMLReader->new( Navigator => $builder ); | 
|  | 59 | 
|  | 60     $reader2->ParseFile("Resources/person_info.xml"); | 
|  | 61     print "Parsing small Xml file: ",tv_interval($t,[gettimeofday]),"\n"; | 
|  | 62 | 
| 103 | 63     $t = [gettimeofday]; | 
|  | 64     IMPL::DOM::Schema->LoadSchema('Resources/form.xml') for 1..10; | 
|  | 65     print "Load a small schema 10 times: ",tv_interval($t,[gettimeofday]),"\n"; | 
|  | 66 | 
| 49 | 67 sub selectAll { | 
|  | 68     my $node = shift; | 
|  | 69     $node,map selectAll($_),@{$node->childNodes}; | 
|  | 70 } |