Question

I need to get all of the namespaces in the scope of an XML::LibXML::Node. The module has a getNamespaces() method, but the documentation explicitly says that it

will not return all namespaces that are in scope, but only the ones declared explicitly for that node.

So how do I get all of the namespaces in the scope of a particular node?

Was it helpful?

Solution

I didn't find any functions to do this, but it is certainly possible with XPath:

@nodes = $node->findnodes('namespace::*');

That returns all of the namespaces in a scope visible to $node. You can then get prefixes and URIs from the returned XML::LibXML::Node::Namespace objects returned:

@prefix_uris = map {[ $_->getLocalName, $_->getData]} @nodes;
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top