1use Test;
2BEGIN { plan tests => 9 }
3
4use XML::XPath;
5ok(1);
6
7my $xp = XML::XPath->new(ioref => *DATA);
8ok($xp);
9
10my @nodes;
11
12# Don't set namespace prefixes - uses element context namespaces
13
14@nodes = $xp->findnodes('//foo:foo'); # should find foobar.com foos
15ok(@nodes, 3);
16
17@nodes = $xp->findnodes('//goo:foo'); # should find no foos
18ok(@nodes, 0);
19
20@nodes = $xp->findnodes('//foo'); # should find default NS foos
21ok(@nodes, 2);
22
23# Set namespace mappings.
24
25$xp->set_namespace("foo" => "flubber.example.com");
26$xp->set_namespace("goo" => "foobar.example.com");
27
28# warn "TEST 6\n";
29@nodes = $xp->findnodes('//foo:foo'); # should find flubber.com foos
30# warn "found: ", scalar @nodes, "\n";
31ok(@nodes, 2);
32
33@nodes = $xp->findnodes('//goo:foo'); # should find foobar.com foos
34ok(@nodes, 3);
35
36@nodes = $xp->findnodes('//foo'); # should find default NS foos
37ok(@nodes, 2);
38
39ok($xp->findvalue('//attr:node/@attr:findme'), 'someval');
40
41__DATA__
42<xml xmlns:foo="foobar.example.com"
43    xmlns="flubber.example.com">
44    <foo>
45        <bar/>
46        <foo/>
47    </foo>
48    <foo:foo>
49        <foo:foo/>
50        <foo:bar/>
51        <foo:bar/>
52        <foo:foo/>
53    </foo:foo>
54    <attr:node xmlns:attr="attribute.example.com"
55        attr:findme="someval"/>
56</xml>
57