XML::LibXML::XPathContextで良くやるミス
自戒の為にメモっとく。
<?xml version="1.0" encoding="utf-8"?> <doc xmlns:foo="http://foo.com/" xmlns="http://bar.com/"> <x/> <foo:x/> </doc>
なんてxmlがあるとして、
#!/usr/bin/perl use strict; use warnings; use XML::LibXML; use XML::LibXML::XPathContext; my $doc = XML::LibXML->new->parse_file("test.xml"); my $xpc = XML::LibXML::XPathContext->new($doc); print $xpc->findnodes('//x')->size . "\n";
これは期待に反して「0」と返って来る。
正解はこちら。
#!/usr/bin/perl use strict; use warnings; use XML::LibXML; use XML::LibXML::XPathContext; my $doc = XML::LibXML->new->parse_file("test.xml"); my $xpc = XML::LibXML::XPathContext->new($doc); $xpc->registerNs("bar", "http://bar.com/"); print $xpc->findnodes('//bar:x')->size . "\n";