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
?
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.
The DOM parser functions are part of the PHP core. There is no installation needed to use these functions.
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:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With