tobyink provides another solution here
Re: LibXML, XPath and Namespaces
my $string = q|
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:junos
+="http://xml.juniper.net/junos/12.3R9/junos">
<vlan-information junos:style="terse">
<vlan>
<vlan-name>Vlan</vlan-name>
</vlan>
</vlan-information>
</rpc-reply>|;
my $jparser = XML::LibXML->new;
my $doc = $jparser->parse_string($string);
my @vlans = $doc->findnodes("//vlan-information/vlan");
print "found ", scalar @vlans, " vlans\n";
print "The root element's namespace is: ",
$doc->documentElement->namespaceURI, "\n";
# Give that namespace a prefix so that we can reference it in XPath
$doc->documentElement->setNamespaceDeclPrefix("", "x");
@vlans = $doc->findnodes("//x:vlan-information/x:vlan");
print "found ", scalar @vlans, " vlans\n";
foreach my $vlan (@vlans){
my @parameters = $vlan->findnodes("./x:vlan-name");
print "found ", scalar @parameters, " parameters\n";
}
Output:
found 0 vlans
The root element's namespace is: urn:ietf:params:xml:ns:netconf:base:1
+.0
found 1 vlans
found 1 parameters