Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Enumerate registered namespaces of a PHP DOMDocument object

For one of my projects, I'm using the DOMDocument class to load and manipulate XML documents.

I'd need to retrieve every namespace used in the document; however, I can't find how I'd do that. The DOMDocument class has methods to get the namespace prefix of an URI or the URI of a namespace prefix, but I've seen nothing to actually enumerate registered namespaces.

The SimpleXML library has a getNamespaces() method for that. Is there an equivalent for DOMDocument?

like image 334
zneak Avatar asked Apr 03 '10 19:04

zneak


People also ask

What is DOMDocument() in PHP?

The DOMDocument::getElementsByTagName() function is an inbuilt function in PHP which is used to return a new instance of class DOMNodeList which contains all the elements of local tag name.

Is there a DOM in PHP?

The DOM parser functions are part of the PHP core. There is no installation needed to use these functions.


1 Answers

DOM does not have such a function afaik. I've looked briefly at the source code of SimpleXml and I think it iterates the loaded XML and collects the namespaces (my C is very bad). The easiest solution would be to fetch the namespaces by importing the DOM dom into SimpleXml for this purpose. Maybe like this:

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();
    }
}

You could also try to get all namespaces with XPath. See the following question and answers:

  • How to retrieve namespaces in XML files using Xpath
like image 147
Gordon Avatar answered Sep 28 '22 07:09

Gordon