(PHP 5 >= 5.2.0, PHP 7)
SimpleXMLElement::registerXPathNamespace — Создает префикс/пространство имен контекста для следующего XPath запроса
$prefix
, string $ns
)Создает префикс/пространство имен контекста для следующего 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 позволяет избежать будущих модификаций запросов, даже если поставщик изменит префикс пространства имен.