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:

<from>Jani</from>

Парсер, основанный на событиях, представляет приведённый выше XML как последовательность из трёх событий:

  • Начало элемента: from
  • Начало секции CDATA, значение: Jani
  • Конец элемента: from

Приведённый выше пример XML содержит правильно сформированный XML. Однако этот пример является недействительным XML, поскольку с ним не связана декларация типа документа (DTD).

Однако при использовании парсера Expat это не имеет значения. Expat — это невалидирующий парсер, который игнорирует любую DTD.

Будучи основанным на событиях невалидирующим XML-парсером, Expat быстр и лёгок, что делает его очень подходящим для веб-приложений на PHP.

Примечание:XML-документы должны быть правильно сформированы, иначе Expat сгенерирует ошибку.


Установка

Функции XML-парсера Expat являются частью ядра PHP. Эти функции можно использовать без установки.


XML-файл

В нашем примере будет использоваться следующий XML-файл:

<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Напоминание</heading>
<body>Не забудь меня в эти выходные!</body>
</note>


Инициализация XML-парсера

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

Пример

<?php
//Инициализируем 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
Заголовок: Напоминание
Сообщение: Не забудь меня в эти выходные!

Как это работает:

  1. Инициализируйте XML-парсер с помощью функции xml_parser_create()
  2. Создайте функции для работы с различными обработчиками событий
  3. Добавьте функцию xml_set_element_handler(), чтобы определить, какую функцию выполнять, когда парсер встречает открывающие и закрывающие теги
  4. Добавьте функцию xml_set_character_data_handler(), чтобы определить, какую функцию выполнять, когда парсер встречает символьные данные
  5. Разберите файл "test.xml" с помощью функции xml_parse()
  6. В случае ошибки добавьте функцию xml_error_string(), чтобы преобразовать ошибку XML в текстовое описание
  7. Вызовите функцию xml_parser_free(), чтобы освободить память, выделенную функцией xml_parser_create()

Дополнительная информация о PHP Expat Parser

Для получения дополнительной информации о функциях PHP Expat посетите нашеСправочное руководство по PHP XML Parser。

Другие расширения