我需要在XML::LibXML::Node的范围内获取所有名称空间。该模块具有getNamespaces()
方法,但文档明确指出它
不会返回范围内的所有名称空间,而只会返回为该节点明确声明的名称空间。
那么如何获取特定节点范围内的所有命名空间呢?
答案 0 :(得分:3)
我没有找到任何函数来执行此操作,但使用XPath肯定是可能的:
@nodes = $node->findnodes('namespace::*');
返回$node
可见范围内的所有名称空间。然后,您可以从返回的返回的XML :: LibXML :: Node :: Namespace对象中获取前缀和URI:
@prefix_uris = map {[ $_->getLocalName, $_->getData]} @nodes;