XML::LibXML::XPathContext exists since XML::LibXML 1.61, and it's the appropriate way of working with namespaces in XPaths for XML::LibXML.
my $xpc = XML::LibXML::XPathContext->new( $doc ); $xpc->registerNs( ota => 'http://www.opentravel.org/OTA/2003/05' ); my @options = $xpc->findnodes('//ota:OriginDestinationOption');
How did one do the above before XML::LibXML 1.61?
# Doesn't work because OriginDestinationOption belong to # the http://www.opentravel.org/OTA/2003/05 NS, not the # null NS. my $root = $doc->documentElement(); my @opts = $root->findnodes("//OriginDestinationOption");
If there was a prefix in play, I believe I could specify it, but the elements are using the default namespace.
# Doesn't work because OriginDestinationOption element # appears as <OriginDestinationOption>, rather than # <ota:OriginDestinationOption> my $root = $doc->documentElement(); my @opts = $root->findnodes("//ota:OriginDestinationOption");
The only thing I've found that works is
my $root = $doc->documentElement(); my @opts = $root->findnodes("//*[name()="OriginDestinationOption"]');
yuck!
In reply to XML::LibXML and namespaces, before 1.61 by ikegami
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |