The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use Test;
BEGIN { plan tests => 9 }

use XML::XPath;
ok(1);

my $xp = XML::XPath->new(ioref => *DATA);
ok($xp);

my @nodes;

# Don't set namespace prefixes - uses element context namespaces

@nodes = $xp->findnodes('//foo:foo'); # should find foobar.com foos
ok(@nodes, 3);

@nodes = $xp->findnodes('//goo:foo'); # should find no foos
ok(@nodes, 0);

@nodes = $xp->findnodes('//foo'); # should find default NS foos
ok(@nodes, 2);

# Set namespace mappings.

$xp->set_namespace("foo" => "flubber.example.com");
$xp->set_namespace("goo" => "foobar.example.com");

# warn "TEST 6\n";
@nodes = $xp->findnodes('//foo:foo'); # should find flubber.com foos
# warn "found: ", scalar @nodes, "\n";
ok(@nodes, 2);

@nodes = $xp->findnodes('//goo:foo'); # should find foobar.com foos
ok(@nodes, 3);

@nodes = $xp->findnodes('//foo'); # should find default NS foos
ok(@nodes, 2);

ok($xp->findvalue('//attr:node/@attr:findme'), 'someval');

__DATA__
<xml xmlns:foo="foobar.example.com"
    xmlns="flubber.example.com">
    <foo>
        <bar/>
        <foo/>
    </foo>
    <foo:foo>
        <foo:foo/>
        <foo:bar/>
        <foo:bar/>
        <foo:foo/>
    </foo:foo>
    <attr:node xmlns:attr="attribute.example.com"
        attr:findme="someval"/>
</xml>