/xmlbench/trunk

To get this branch, use:
bzr branch http://darksoft.org/webbzr/xmlbench/trunk

« back to all changes in this revision

Viewing changes to parse/scripts/libxml.pl

  • Committer: Suren A. Chilingaryan
  • Date: 2009-10-02 01:16:02 UTC
  • Revision ID: csa@dside.dyndns.org-20091002011602-ut1jl0go12npun6y
DOM walking for all Libxml bindings: ruby, python, perl, php, lisp

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
#!/usr/bin/perl
2
 
 
 
2
use POSIX;
3
3
use XML::LibXML;
 
4
use XML::LibXML::Common;
4
5
$parser = new XML::LibXML;
5
6
 
 
7
sub getnum {
 
8
    use POSIX;
 
9
    my $str = shift;
 
10
    $str =~ s/^\s+//;
 
11
    $str =~ s/\s+$//;
 
12
    $! = 0;
 
13
    my($num, $unparsed) = strtod($str);
 
14
    if (($str eq '') && ($unparsed != 0) && $!) {
 
15
        return undef;
 
16
    } else {
 
17
        return $num;
 
18
    }
 
19
}
 
20
 
6
21
sub parse {
7
 
    ($xml) = @_;
 
22
    ($xml, $walk) = @_;
8
23
    $doc = $parser->parse_file ($xml);
 
24
    if ($walk) {
 
25
        my $sum = 0;
 
26
        my @nodes = $doc->findnodes("//*[(number(@*) or number(text())) and (count(../child::*)>3)]");
 
27
        foreach $node(@nodes) {
 
28
            $child = $node->getFirstChild();
 
29
            if (($child)&&($child->nodeType == TEXT_NODE)) {
 
30
                my $res = getnum($child->getData());
 
31
                if (defined $res) { $sum += $res; next;}
 
32
            }
 
33
            
 
34
            @attrs = $node->attributes();
 
35
            foreach $attr(@attrs) {
 
36
                my $res = getnum($attr->value());
 
37
                if (defined $res) { $sum += $res; last;}
 
38
            }
 
39
        }
 
40
#       print "Sum: $sum\n";
 
41
    }
9
42
    undef($doc);
10
43
}
11
44
 
15
48
    else { return "../xml.tmp/$i.xml"; }
16
49
}
17
50
 
 
51
my $walk_tree = $ENV{'walk_tree'};
 
52
 
18
53
if (@ARGV > 0) {
19
54
    $iterations = $ARGV[0];
20
55
} else {
21
56
    $iterations = 0;
22
57
}
23
58
 
24
 
parse(filename(0));
 
59
parse(filename(0), $walk_tree);
25
60
for ($i=1;$i<=$iterations;$i++) {
26
 
    parse(filename($i));
 
61
    parse(filename($i), $walk_tree);
27
62
}