view _test/any.pl @ 250:129e48bb5afb

DOM refactoring ObjectToDOM methods are virtual QueryToDOM uses inflators Fixed transform for the complex values in the ObjectToDOM QueryToDOM doesn't allow to use complex values (HASHes) as values for nodes (overpost problem)
author sergey
date Wed, 07 Nov 2012 04:17:53 +0400
parents c289ed9662ca
children 3f38dabaf5cc
line wrap: on
line source

#!/usr/bin/perl -w
use strict;
use lib '..\Lib';

require IMPL::DOM::Navigator::SimpleBuilder;
require IMPL::DOM::XMLReader;
require IMPL::DOM::Schema;

my $builder = IMPL::DOM::Navigator::SimpleBuilder->new();
    
    use Time::HiRes qw(gettimeofday tv_interval);
    
    my $t = [gettimeofday];
    
    $builder->NavigateCreate('personInfo', version => '1');
        $builder->NavigateCreate('firstName')->nodeValue('Nemo');
        $builder->Back();
        $builder->NavigateCreate('lastName')->nodeValue('Nobel');
        $builder->Back();
        $builder->NavigateCreate('lastName')->nodeValue('Gardum');
        $builder->Back();
        for(my $i = 0 ; $i < 10000; $i++) {
            $builder->NavigateCreate('address', local => 1);
                $builder->NavigateCreate('street')->nodeValue('Hellroad');
                $builder->Back();
                $builder->NavigateCreate('line')->nodeValue($_);
                $builder->Back();
            $builder->Back();
        }
    $builder->Back();
    
    print "Build: ",tv_interval($t,[gettimeofday]),"\n";
    
    $t = [gettimeofday];
    
    my $doc = new IMPL::DOM::Document(nodeName => 'doc');
    for(my $i = 0 ; $i < 30000; $i++) {
        my $node = new IMPL::DOM::Node(nodeName => 'test');
        $node->nodeValue(100);
        $doc->appendChild($node);
    }
    
    print "Create 30000 nodes: ",tv_interval($t,[gettimeofday]),"\n";
    
    $t = [gettimeofday];
    $builder = IMPL::DOM::Navigator::SimpleBuilder->new();
    my $reader = IMPL::DOM::XMLReader->new( Navigator => $builder );
    
    $reader->ParseFile("Resources/large.xml");
    print "Parsing large Xml file: ",tv_interval($t,[gettimeofday]),"\n";
    
    my $count = selectAll($builder->Document);
    my $len = length $builder->Document->text;
    print "Total nodes loaded: $count, data length: $len\n";
    
    $t = [gettimeofday];
    $builder = IMPL::DOM::Navigator::SimpleBuilder->new();
    my $reader2 = IMPL::DOM::XMLReader->new( Navigator => $builder );
    
    $reader2->ParseFile("Resources/person_info.xml");
    print "Parsing small Xml file: ",tv_interval($t,[gettimeofday]),"\n";
    
    $t = [gettimeofday];
    IMPL::DOM::Schema->LoadSchema('Resources/form.xml') for 1..10;
    print "Load a small schema 10 times: ",tv_interval($t,[gettimeofday]),"\n";
    
sub selectAll {
    my $node = shift;
    $node,map selectAll($_),@{$node->childNodes};
}