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