Парсер PHP XML Expat
Анализаторы на основе событий распознают XML-файл как последовательность событий. В этом уроке мы познакомим вас с облегченным парсером Expat XML. Он существует уже более двух десятилетий, и в PHP есть встроенные функции для использования наряду с ним.
Парсер XML Expat
Синтаксический парсер PHP Expat XML используется для выполнения анализа XML на основе событий.
Чтобы лучше понять, как работает парсер Expat XML, давайте сначала рассмотрим простой пример формата XML:
Как известно, Expat основан на событиях. Это означает, что он считывает эти данные как серию событий:
- Стартовый элемент:
<from>
- Запустить раздел CDATA, значение:
Me
- Закрывающий элемент:
</from>
Функции XML Expat Parser являются частью ядра PHP. Для использования этих функций установка не требуется.
XML-файл
Для парсинга мы используем XML-документ с именем file.xml. В приведенном ниже примере вы можете просмотреть его содержимое:
Пример
Скопировать<?xml version="1.0" encoding="UTF-8"?>
<note>
<to>You</to>
<from>Me</from>
<heading>The Game</heading>
<body>You lost it.</body>
</note>
Инициализация парсера XML Expat
В следующем примере инициализируем парсер XML Expat с помощью PHP:
Пример
Попробуй сам »<?php
// Инициализация парсера XML Expat
$expat_parser = xml_parser_create();
// Декларируем функцию, которую мы будем использовать в начале элемента
function start($expat_parser,$_name,$_attrs) {
switch($_name) {
case "NOTE":
echo "-- Note --<br>";
break;
case "TO":
echo "Recipient: ";
break;
case "FROM":
echo "Sender: ";
break;
case "HEADING":
echo "Topic: ";
break;
case "BODY":
echo "Letter: ";
}
}
// Объявляем функцию, которую мы будем использовать в конце элемента
function stop($expat_parser, $_name) {
echo "<br>";
}
//Декларируем функцию, которую мы будем использовать для поиска символьных данных
function char($expat_parser, $data) {
echo $data;
}
// Декларируем обработчик для наших элементов
xml_set_element_handler($expat_parser, "start", "stop");
// Декларируем обработчик для наших элементов
xml_set_character_data_handler($expat_parser, "char");
// Откройте XML-файл, который мы хотим прочитать
$fp = fopen("file.xml", "r");
// Читаем наши данные
while ($data=fread($fp,4096)) {
xml_parse($expat_parser, $data, feof($fp)) or die (sprintf("XML Error: %s at line %d", xml_error_string(xml_get_error_code($expat_parser)), xml_get_current_line_number($expat_parser)));
}
// прекращаем использование XML Expat Parser
xml_parser_free($expat_parser);
?>
Результат выполнения кода:
Recipient: You
Sender: Me
Topic: The Game
Letter: You lost it.
Разбор вышеприведенного кода:
- Инициализируем синтаксический анализатор XML с помощью функции
xml_parser_create()
- Создаём функции для использования с различными обработчиками событий
- Добавляем функцию
xml_set_element_handler()
, чтобы указать, какая функция будет выполняться, когда парсер обнаружит открывающий и закрывающий теги - Добавляем функцию
xml_set_character_data_handler()
, чтобы указать, какая функция будет выполняться, когда парсер обнаруживает символьные данные - Разберём файл file.xml с помощью функции
xml_parse()
- Добавим функцию
xml_error_string()
для преобразования ошибки XML, в случае её возникновения, в текстовое описание - Вызываем функцию
xml_parser_free()
, чтобы освободить память, занятую функциейxml_parser_create()
.