6 |
# and Egon Willighagen, egonw@sci.kun.nl |
# and Egon Willighagen, egonw@sci.kun.nl |
7 |
# |
# |
8 |
# $Log$ |
# $Log$ |
9 |
# Revision 1.1 2003/04/26 01:44:00 joko |
# Revision 1.2 2003/04/30 00:06:55 joko |
10 |
# initial commit - from http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/xmlxslt/XML-XSLT/lib/XML/XSLT.pm?rev=1.19&content-type=text/vnd.viewcvs-markup |
# NEW: sub __evaluate_test__ now detects a variable name in an lvalue of an expression (e.g. $var=val, {$var}=val) |
11 |
# |
# |
12 |
# Revision 1.19 2002/02/18 09:05:14 gellyfish |
# Revision 1.19 2002/02/18 09:05:14 gellyfish |
13 |
# Refactoring |
# Refactoring |
496 |
|
|
497 |
foreach my $child ($xsl->getElementsByTagName ('*', 0)) |
foreach my $child ($xsl->getElementsByTagName ('*', 0)) |
498 |
{ |
{ |
499 |
my ($ns, $tag) = split(':', $child->getTagName()); |
my ($ns, $tag) = split(':', $child->getTagName()); |
500 |
if(not defined $tag) |
if(not defined $tag) |
501 |
{ |
{ |
502 |
$tag = $ns; |
$tag = $ns; |
2605 |
$self->debug("no test matches"); |
$self->debug("no test matches"); |
2606 |
return 0; |
return 0; |
2607 |
} |
} |
2608 |
|
|
2609 |
|
# tests for variables|parameters |
2610 |
|
} elsif ($test =~ /^\s*{*\$([\w\.\:\-]+)}*\s*(<=|>=|!=|=|<|>)\s*['"]?([^'"]*)['"]?\s*$/) { |
2611 |
|
my $expval = $3; |
2612 |
|
my $test = $2; |
2613 |
|
=pod |
2614 |
|
my $nodeset=&_get_node_set($self,$1,$self->xml_document(),$path,$node,$variables); |
2615 |
|
return ($expval ne '') unless @$nodeset; |
2616 |
|
my $content = &__string__($self,$$nodeset[0]); |
2617 |
|
=cut |
2618 |
|
my $variable_name = $1; |
2619 |
|
my $content = &__string__($self,$variables->{$variable_name}); |
2620 |
|
my $numeric = $content =~ /^\d+$/ && $expval =~ /^\d+$/ ? 1 : 0; |
2621 |
|
|
2622 |
|
$self->debug("evaluating $content $test $expval"); |
2623 |
|
|
2624 |
|
if ( $test eq '!=' ) |
2625 |
|
{ |
2626 |
|
return $numeric ? $content != $expval : $content ne $expval; |
2627 |
|
} |
2628 |
|
elsif ( $test eq '=' ) |
2629 |
|
{ |
2630 |
|
return $numeric ? $content == $expval : $content eq $expval; |
2631 |
|
} |
2632 |
|
elsif ( $test eq '<' ) |
2633 |
|
{ |
2634 |
|
return $numeric ? $content < $expval : $content lt $expval; |
2635 |
|
} |
2636 |
|
elsif ( $test eq '>' ) |
2637 |
|
{ |
2638 |
|
return $numeric ? $content > $expval : $content gt $expval; |
2639 |
|
} |
2640 |
|
elsif ( $test eq '>=' ) |
2641 |
|
{ |
2642 |
|
return $numeric ? $content >= $expval : $content ge $expval; |
2643 |
|
} |
2644 |
|
elsif ( $test eq '<=' ) |
2645 |
|
{ |
2646 |
|
return $numeric ? $content <= $expval : $content le $expval; |
2647 |
|
} |
2648 |
|
else |
2649 |
|
{ |
2650 |
|
$self->warn("no test matches while evaluating parameter comparison: $test"); |
2651 |
|
return 0; |
2652 |
|
} |
2653 |
} else { |
} else { |
2654 |
$self->debug("no match for test"); |
$self->debug("no match for test"); |
2655 |
return ""; |
return ""; |
2656 |
} |
} |
2657 |
} |
} |