(PHP 5 >= 5.1.0, PHP 7)
SimpleXMLElement::registerXPathNamespace — Создает префикс/пространство имен контекста для следующего запроса XPath
$prefix
, string $ns
) : boolСоздает префикс/пространство имен контекста для следующего запроса XPath. В частности это необходимо, если поставщик данного XML-документа изменяет префикс пространства имен. registerXPathNamespace создаст префикс для связанного пространства имен, позволяя получить доступ к узлам в этом пространстве имен без необходимости изменения кода, учитывающего новые префиксы, предоставленные поставщиком.
prefix
Префикс используемого пространства имен в запросе XPath для получения
пространства имен в ns
.
ns
Используемое пространство имен для запроса XPath. Оно должно
соответствовать пространству имен в используемом XML-документе
или запрос XPath, использующий prefix
не даст никаких результатов.
Возвращает TRUE
в случае успешного завершения или FALSE
в случае возникновения ошибки.
Пример #1 Установка префикса пространства имен для использования в запросе XPath
<?php
$xml = <<<EOD
<book xmlns:chap="http://example.org/chapter-title">
<title>My Book</title>
<chapter id="1">
<chap:title>Chapter 1</chap:title>
<para>Donec velit. Nullam eget tellus vitae tortor gravida scelerisque.
In orci lorem, cursus imperdiet, ultricies non, hendrerit et, orci.
Nulla facilisi. Nullam velit nisl, laoreet id, condimentum ut,
ultricies id, mauris.</para>
</chapter>
<chapter id="2">
<chap:title>Chapter 2</chap:title>
<para>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Proin
gravida. Phasellus tincidunt massa vel urna. Proin adipiscing quam
vitae odio. Sed dictum. Ut tincidunt lorem ac lorem. Duis eros
tellus, pharetra id, faucibus eu, dapibus dictum, odio.</para>
</chapter>
</book>
EOD;
$sxe = new SimpleXMLElement($xml);
$sxe->registerXPathNamespace('c', 'http://example.org/chapter-title');
$result = $sxe->xpath('//c:title');
foreach ($result as $title) {
echo $title . "\n";
}
?>
Результат выполнения данного примера:
Chapter 1 Chapter 2
Обратите внимание, на то, как в примере XML-документу устанавливается пространство имен с префиксом chap. Представьте, что этот документ (или другой похожий) использовал префикс c в прошлом для одного и того же пространства имен. Так как он изменился, запрос XPath больше не вернет правильных результатов, и запрос придется изменять. Использование registerXPathNamespace позволяет избежать будущих модификаций запросов, даже если поставщик изменит префикс пространства имен.