Перечислить зарегистрированные пространства имен объекта PHP DOMDocument - PullRequest
5 голосов
/ 03 апреля 2010

В одном из моих проектов я использую класс DOMDocument для загрузки и управления XML-документами.

Мне нужно получить все пространства имен, используемые в документе; Однако я не могу найти, как я это сделаю. Класс DOMDocument имеет методы для получения префикса пространства имен URI или URI префикса пространства имен, но я ничего не видел, чтобы фактически перечислить зарегистрированные пространства имен.

В библиотеке SimpleXML есть метод getNamespaces() для этого. Есть ли эквивалент для DOMDocument?

1 Ответ

6 голосов
/ 04 апреля 2010

DOM не имеет такой функции afaik.Я кратко рассмотрел исходный код 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();
    }
}

Вы также можете попытаться получить все пространства имен с помощью XPath.См. Следующий вопрос и ответы:

...