use Test::More tests => 36; use XML::Parser::Lite::Tree; # # test the whitespace folding # my $parser = new XML::Parser::Lite::Tree(skip_white => 1); my $tree = $parser->parse(" woo "); is(scalar @{&get_node($tree, '' )->{children}}, 1, "one child of the root node"); is(scalar @{&get_node($tree, '0' )->{children}}, 1, "one child, level 2"); is(scalar @{&get_node($tree, '0/0' )->{children}}, 1, "one child, level 3"); is(scalar @{&get_node($tree, '0/0/0')->{children}}, 1, "one child, level 4"); is(&get_node($tree, '0' )->{type}, 'element'); is(&get_node($tree, '0/0' )->{type}, 'element'); is(&get_node($tree, '0/0/0' )->{type}, 'element'); is(&get_node($tree, '0/0/0/0')->{type}, 'text'); is(&get_node($tree, '0' )->{name}, 'foo'); is(&get_node($tree, '0/0' )->{name}, 'bar'); is(&get_node($tree, '0/0/0' )->{name}, 'baz'); is(&get_node($tree, '0/0/0/0')->{content}, 'woo'); # # test the namespace parsing # my $xml = q~ ~; $parser = new XML::Parser::Lite::Tree(process_ns => 1, skip_white => 1); $tree = $parser->parse($xml); is(&get_node($tree, '0' )->{ns}, 'urn:default'); is(&get_node($tree, '0/0' )->{ns}, 'urn:default'); is(&get_node($tree, '0/1' )->{ns}, 'urn:foo'); is(&get_node($tree, '0/1/0')->{ns}, 'urn:override'); is(&get_node($tree, '0' )->{name}, 'aaa'); is(&get_node($tree, '0/0' )->{name}, 'bbb'); is(&get_node($tree, '0/1' )->{name}, 'foo:ccc'); is(&get_node($tree, '0/1/0')->{name}, 'ddd'); is(&get_node($tree, '0' )->{local_name}, 'aaa'); is(&get_node($tree, '0/0' )->{local_name}, 'bbb'); is(&get_node($tree, '0/1' )->{local_name}, 'ccc'); is(&get_node($tree, '0/1/0')->{local_name}, 'ddd'); is(&get_node($tree, '0' )->{namespaces}->{__default__}, 'urn:default'); is(&get_node($tree, '0/0' )->{namespaces}->{__default__}, 'urn:default'); is(&get_node($tree, '0/1' )->{namespaces}->{__default__}, 'urn:override'); is(&get_node($tree, '0/1/0')->{namespaces}->{__default__}, 'urn:override'); is(&get_node($tree, '0' )->{namespaces}->{foo}, 'urn:foo'); is(&get_node($tree, '0/0' )->{namespaces}->{foo}, 'urn:foo'); is(&get_node($tree, '0/1' )->{namespaces}->{foo}, 'urn:foo'); is(&get_node($tree, '0/1/0')->{namespaces}->{foo}, 'urn:foo'); is(&get_node($tree, '0 ')->{namespaces}->{bar}, undef); is(&get_node($tree, '0/0 ')->{namespaces}->{bar}, undef); is(&get_node($tree, '0/1 ')->{namespaces}->{bar}, undef); is(&get_node($tree, '0/1/0')->{namespaces}->{bar}, 'urn:bar'); # # a super-simple xpath-like function for finding a single given child # sub get_node { my ($tree, $path) = @_; my $node = $tree; if (length $path){ my @refs = split /\//, $path; for my $ref (@refs){ $node = $node->{children}->[$ref]; } } return $node; }