W3docs

xml_parser_create_ns()

Функция xml_parser_create_ns() — это встроенная функция PHP, создающая новый XML-парсер с поддержкой пространств имён.

Функция xml_parser_create_ns() — это встроенная функция PHP, которая создаёт новый XML-парсер с поддержкой пространств имён. Она входит в состав расширения XML Parser и используется при разборе XML-документов. В отличие от SimpleXML, эта функция работает с событийно-управляемым API с прямым доступом, что позволяет эффективно обрабатывать XML-потоки. При включённой поддержке пространств имён парсер автоматически разрешает префиксы пространств имён и передаёт структурированные имена элементов в ваши обработчики, устраняя необходимость ручного разрешения префиксов.

Синтаксис

Синтаксис функции xml_parser_create_ns() выглядит следующим образом:

Синтаксис функции xml_parser_create_ns() в PHP

xml_parser_create_ns(?string $encoding = null, string $namespace_separator = '?')

Где $encoding — это кодировка символов, используемая в XML-данных (например, 'UTF-8'), а $namespace_separator — символ, используемый для объединения URI пространства имён с локальными именами в обратных вызовах обработчиков (по умолчанию ?). Оба параметра являются необязательными.

Примеры использования

Рассмотрим практические примеры использования xml_parser_create_ns() в PHP.

Пример 1: Создание XML-парсера

Чтобы создать парсер, вызовите xml_parser_create_ns(). Функция возвращает ресурс парсера, который необходимо настроить с помощью обработчиков элементов и символов перед выполнением разбора.

создание нового XML-парсера с поддержкой пространств имён

$parser = xml_parser_create_ns();
// Configure handlers and parse data...

Этот код создаёт новый парсер с включённой обработкой пространств имён. Ресурс парсера затем используется совместно с xml_set_element_handler() и xml_parse() для обработки XML-данных.

Пример 2: Разбор XML-данных с префиксами пространств имён

При включённой поддержке пространств имён расширение XML Parser автоматически разрешает префиксы пространств имён. Имена элементов, передаваемые обработчикам, форматируются как namespace_uri?local_name (с использованием разделителя по умолчанию). Разрешение пространств имён выполняется самим парсером, а не вручную.

разбор XML-данных с помощью расширения XML Parser

$parser = xml_parser_create_ns();
$xml_data = '<?xml version="1.0"?><root xmlns:ns="http://example.com"><ns:child>value</ns:child></root>';

xml_set_element_handler($parser, function($parser, $name) {
    echo "Element: $name\n";
}, function($parser, $name) {
    echo "End Element: $name\n";
});

xml_parse($parser, $xml_data);
xml_parser_free($parser);

Этот код создаёт парсер, определяет обработчики для захвата имён элементов и выполняет разбор XML-строки. Имя элемента ns:child автоматически разрешается и передаётся обработчику в виде http://example.com?child.

Пример 3: Настройка кодировки символов и разделителя

По умолчанию xml_parser_create_ns() предполагает, что XML-данные используют кодировку системы по умолчанию. Вы можете указать кодировку и пользовательский разделитель пространств имён, чтобы обеспечить корректную обработку символов и форматирование обратных вызовов.

настройка кодировки и разделителя для правильной обработки символов

$parser = xml_parser_create_ns('UTF-8', '|');
$xml_data = '<?xml version="1.0"?><root xmlns:ns="http://example.com"><ns:child>value</ns:child></root>';

xml_set_element_handler($parser, function($parser, $name) {
    echo "Element: $name\n";
}, null);

xml_parse($parser, $xml_data);
xml_parser_free($parser);

Этот код создаёт парсер с кодировкой UTF-8 и пользовательским разделителем |. Ресурс парсера освобождается после использования, чтобы предотвратить утечки памяти.

Практика

Практика
Какой результат выведет PHP-код, доступный по указанной ссылке?
Какой результат выведет PHP-код, доступный по указанной ссылке?
Was this page helpful?