Перейти к содержимому

xml_parse_into_struct()

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

Эта функция полезна, когда необходимо извлечь данные из XML-файла, например, для преобразования XML-данных в другой формат или для анализа структуры XML-файла.

Синтаксис

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


php
xml_parse_into_struct($parser, $data, &$values, &$index)

Где $parser — это ресурс парсера XML, возвращаемый функцией xml_parser_create(), $data — XML-данные для парсинга, $values — массив, который будет содержать распарсенные данные, а $index — массив, содержащий индексные значения распарсенных данных.

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

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

Пример 1: Парсинг XML-данных в структурированный массив

Предположим, у вас есть XML-файл data.xml, который нужно распарсить в структурированный массив. Вы можете использовать функцию xml_parse_into_struct() для парсинга XML-данных следующим образом:


php
$xml_parser = xml_parser_create();
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 0);
$xml_data = file_get_contents("data.xml");
$values = array();
$index = array();
if (!xml_parse_into_struct($xml_parser, $xml_data, $values, $index)) {
  $error_message = xml_error_string(xml_get_error_code($xml_parser));
  $error_line = xml_get_current_line_number($xml_parser);
  echo "XML Parsing Error: $error_message at line $error_line";
}
xml_parser_free($xml_parser);

Этот код создает парсер XML с помощью xml_parser_create() и отключает приведение к нижнему регистру (case folding). Он читает XML-файл и сохраняет его содержимое в $xml_data. Затем инициализируются пустые массивы $values и $index, после чего вызывается xml_parse_into_struct() для их заполнения. Если парсинг завершится ошибкой, будут получены код и сообщение об ошибке, а также выведена подробная строка ошибки с указанием номера строки. В конце память парсера освобождается с помощью xml_parser_free().

Пример 2: Анализ структуры XML-файла

Предположим, вы хотите проанализировать структуру data.xml, изучив распарсенные элементы. После парсинга массив $values содержит ассоциативные массивы для каждого XML-элемента с ключами tag, type, value и level. Вы можете перебирать этот массив, чтобы изучить структуру документа:

php
$xml_parser = xml_parser_create();
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 0);
$xml_data = file_get_contents("data.xml");
$values = array();
$index = array();
if (!xml_parse_into_struct($xml_parser, $xml_data, $values, $index)) {
  $error_message = xml_error_string(xml_get_error_code($xml_parser));
  $error_line = xml_get_current_line_number($xml_parser);
  echo "XML Parsing Error: $error_message at line $error_line";
}
xml_parser_free($xml_parser);

foreach ($values as $value) {
  if ($value["type"] == "open") {
    echo "Start element: " . $value["tag"] . "<br/>";
  } else if ($value["type"] == "close") {
    echo "End element: " . $value["tag"] . "<br/>";
  }
}

Этот код повторно использует стандартную настройку парсинга. После парсинга он перебирает массив $values с помощью цикла foreach. Для каждого элемента проверяется ключ type: если он равен "open", выводится начальный тег; если "close" — конечный тег. Этот подход предоставляет простой способ анализа иерархической структуры XML-файла с использованием распарсенных данных.

Заключение

В этой статье мы рассмотрели функцию PHP xml_parse_into_struct() и способы её использования для преобразования XML-данных в структурированный массив. Мы объяснили, что делает функция, её синтаксис, а также привели примеры её применения на практике. Следуя этим примерам, вы сможете легко парсить XML-данные, извлекать данные из XML-файлов, преобразовывать XML в другой формат или анализировать структуру XML-файла в своих PHP-приложениях.

Практика

Что делает функция PHP xml_parse_into_struct()?

Считаете ли это полезным?

Предпросмотр dual-run — сравните с маршрутами Symfony на продакшене.