PHP XML Expat Parser
Встроенный парсер Expat позволяет обрабатывать XML-документы в PHP.
Что такое XML?
XML используется для описания данных, и его основное внимание уделяется тому, что представляют собой данные. XML-файл описывает структуру данных.
В XML нет предопределённых тегов. Вы должны определить свои собственные теги.
Чтобы узнать больше об XML, посетите нашучебник по XML。
Что такое Expat?
Чтобы читать и обновлять — создавать и обрабатывать — XML-документ, вам нужен XML-парсер.
Существуют два основных типа XML-парсеров:
- Древовидные парсеры: этот тип парсера преобразует XML-документ в древовидную структуру. Он анализирует весь документ и предоставляет доступ к элементам в дереве, таким как Document Object Model (DOM).
- Парсеры, основанные на событиях: они рассматривают XML-документ как последовательность событий. Когда происходит определённое событие, парсер вызывает функцию для его обработки.
Парсер Expat — это парсер, основанный на событиях.
Парсеры, основанные на событиях, фокусируются на содержимом XML-документа, а не на его структуре. Из-за этого парсеры, основанные на событиях, могут получать доступ к данным быстрее, чем парсеры, основанные на дереве.
Посмотрите на следующий фрагмент XML:
Парсер, основанный на событиях, представляет приведённый выше XML как последовательность из трёх событий:
- Начало элемента: from
- Начало секции CDATA, значение: Jani
- Конец элемента: from
Приведённый выше пример XML содержит правильно сформированный XML. Однако этот пример является недействительным XML, поскольку с ним не связана декларация типа документа (DTD).
Однако при использовании парсера Expat это не имеет значения. Expat — это невалидирующий парсер, который игнорирует любую DTD.
Будучи основанным на событиях невалидирующим XML-парсером, Expat быстр и лёгок, что делает его очень подходящим для веб-приложений на PHP.
Примечание:XML-документы должны быть правильно сформированы, иначе Expat сгенерирует ошибку.
Установка
Функции XML-парсера Expat являются частью ядра PHP. Эти функции можно использовать без установки.
XML-файл
В нашем примере будет использоваться следующий XML-файл:
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Напоминание</heading>
<body>Не забудь меня в эти выходные!</body>
</note>
Инициализация XML-парсера
Мы инициализируем XML-парсер в PHP, определим обработчики для различных событий XML, а затем разберём XML-файл.
Пример
//Инициализируем XML-парсер
$parser=xml_parser_create();
//Функция, используемая в начале элемента
function start($parser,$element_name,$element_attrs)
{
switch($element_name)
{
case "NOTE":
echo "-- Note --<br>";
break;
case "TO":
echo "Кому: ";
break;
case "FROM":
echo "От: ";
break;
case "HEADING":
echo "Заголовок: ";
break;
case "BODY":
echo "Сообщение: ";
}
}
//Функция, используемая в конце элемента
function stop($parser,$element_name)
{
echo "<br>";
}
//Функция, используемая при обнаружении символьных данных
function char($parser,$data)
{
echo $data;
}
//Укажите обработчик элементов
xml_set_element_handler($parser,"start","stop");
//Укажите обработчик данных
xml_set_character_data_handler($parser,"char");
//Откройте XML-файл
$fp=fopen("test.xml","r");
//Прочитайте данные
while ($data=fread($fp,4096))
{
xml_parse($parser,$data,feof($fp)) or
die (sprintf("XML Error: %s at line %d",
xml_error_string(xml_get_error_code($parser)),
xml_get_current_line_number($parser)));
}
//Освободите XML-парсер
xml_parser_free($parser);
?>
Приведённый выше код выведет:
Кому: Tove
От: Jani
Заголовок: Напоминание
Сообщение: Не забудь меня в эти выходные!
Как это работает:
- Инициализируйте XML-парсер с помощью функции xml_parser_create()
- Создайте функции для работы с различными обработчиками событий
- Добавьте функцию xml_set_element_handler(), чтобы определить, какую функцию выполнять, когда парсер встречает открывающие и закрывающие теги
- Добавьте функцию xml_set_character_data_handler(), чтобы определить, какую функцию выполнять, когда парсер встречает символьные данные
- Разберите файл "test.xml" с помощью функции xml_parse()
- В случае ошибки добавьте функцию xml_error_string(), чтобы преобразовать ошибку XML в текстовое описание
- Вызовите функцию xml_parser_free(), чтобы освободить память, выделенную функцией xml_parser_create()
Дополнительная информация о PHP Expat Parser
Для получения дополнительной информации о функциях PHP Expat посетите нашеСправочное руководство по PHP XML Parser。