xml_parser_create_ns()
Функция xml_parser_create_ns() — это встроенная функция PHP, которая создает новый XML-парсер с поддержкой пространств имен. Она входит в состав расширения XML Parser и используется при разборе XML-документов. В отличие от SimpleXML, эта функция работает с событийным pull-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-код, указанный по ссылке?