使用XML :: LibXML获取范围内的所有命名空间

时间:2013-07-08 22:35:13

标签: xml perl xml-libxml

我需要在XML::LibXML::Node的范围内获取所有名称空间。该模块具有getNamespaces()方法,但文档明确指出它

  

不会返回范围内的所有名称空间,而只会返回为该节点明确声明的名称空间。

那么如何获取特定节点范围内的所有命名空间呢?

1 个答案:

答案 0 :(得分:3)

我没有找到任何函数来执行此操作,但使用XPath肯定是可能的:

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

返回$node可见范围内的所有名称空间。然后,您可以从返回的返回的XML :: LibXML :: Node :: Namespace对象中获取前缀和URI:

@prefix_uris = map {[ $_->getLocalName, $_->getData]} @nodes;