枚举PHP DOMDocument对象的已注册名称空间

zne*_*eak 5 php simplexml domdocument

对于我的一个项目,我正在使用DOMDocument该类来加载和操作XML文档.

我需要检索文档中使用的每个命名空间; 但是,我找不到我是怎么做到的.本DOMDocument类有方法来获取一个URI或命名空间前缀的URI的名称空间前缀,但我什么也没看见实际枚举注册的命名空间.

SimpleXML图书馆拥有getNamespaces()该方法.是否有相应的DOMDocument

Gor*_*don 6

DOM没有这样的功能.我简要地看了一下SimpleXml的源代码,我认为它迭代加载的XML并收集命名空间(我的C非常糟糕).最简单的解决方案是通过将DOM dom导入SimpleXml来获取命名空间.也许是这样的:

class DomUtils
{
    public static function getNamespaces($dom)
    {
        $sxe = simplexml_import_dom($dom);
        return $sxe->getNamespaces(); 
    }

    public static function getDocNamespaces($dom)
    {
        $sxe = simplexml_import_dom($dom);
        return $sxe->getDocNamespaces();
    }
}
Run Code Online (Sandbox Code Playgroud)

您还可以尝试使用XPath获取所有名称空间.请参阅以下问题和答案: