Для одного из моих проектов я использую класс DOMDocument
для загрузки и обработки XML-документов.
Мне нужно получить каждое пространство имен, используемое в документе; однако я не могу найти, как я это сделаю. Класс DOMDocument
имеет методы получения префикса пространства имен URI или URI префикса пространства имен, но я не видел ничего, чтобы фактически перечислять зарегистрированные пространства имен.
Для этого в SimpleXML
библиотеке есть метод getNamespaces()
. Есть ли эквивалент DOMDocument
?
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. См. Следующие вопросы и ответы: