解析器 Expat XML PHP

  • Предыдущая страница PHP ODBC
  • Следующая страница XML DOM

Рекомендуемые курсы:

Внутренний парсер Expat делает возможным обработку XML документов в PHP.

Что такое XML?

В XML нет предопределенных тегов. Вы должны определить свои теги.

Если вы хотите узнать больше о XML, пожалуйста, посетите наш Учебник по XML.

Что такое Expat?

Чтобы читать и обновлять - создавать и обрабатывать - XML документ, вам нужен парсер XML.

Есть два основных типа парсеров XML:

  • Парсер на основе дерева: такой парсер преобразует XML документ в структуру дерева. Он анализирует весь документ и предоставляет API для доступа к элементам в дереве, например, к Document Object Model (DOM).
  • Парсер на основе событий: рассматривает XML документ как последовательность событий. При возникновении конкретного события парсер вызывает функции для обработки.

Парсер на основе событий

Парсер на основе событий сосредоточен на содержимом XML документа, а не на их результатах. Поэтому парсер на основе событий может быстрее доступа к данным, чем парсер на основе дерева.

Смотрите следующий фрагмент XML:

<from>Джон</from>

Парсер на основе событий определяет上面的 XML как последовательность трех событий:

  • Начало элемента: from
  • Начало части CDATA, значение: Джон
  • Закрытие элемента: from

Верхний пример XML содержит правильно сформированный XML. Однако этот пример является невалидным XML, так как у него нет связанного с ним объявления типа документа (DTD) и нет вbuilt DTD.

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

Как парсер XML, основанный на событиях и без проверки, Expat быстр и легок, очень подходит для веб-приложений на PHP.

Комментарий:XML документ должен быть правильно сформирован,否则 Expat будет генерировать ошибки.

Установка

XML Expat парсер является частью ядра PHP. Использование этих функций не требует установки.

XML файл

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

<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>Джордж</to>
<from>Джон</from>
<heading>Памятка</heading>
<body>Не забудьте встречу!</body>
</note>

Инициализация XML-анализатора

Мы должны初始化 XML-анализатор в PHP, определить обработчики для различных событий XML, а затем проанализировать этот XML-файл.

Пример

<?php
//Initialize the XML parser
$parser=xml_parser_create();
//Function to use at the start of an element
function start($parser,$element_name,$element_attrs)
  {
  switch($element_name)
    {
    case "NOTE":
    echo "-- Note --<br />";
    break; 
    case "TO":
    echo "To: ";
    break; 
    case "FROM":
    echo "From: ";
    break; 
    case "HEADING":
    echo "Heading: ";
    break; 
    case "BODY":
    echo "Message: ";
    }
  }
//Function to use at the end of an element
function stop($parser,$element_name)
  {
  echo "<br />";
  }
//Function to use when finding character data
function char($parser,$data)
  {
  echo $data;
  }
//Specify element handler
xml_set_element_handler($parser,"start","stop");
//Specify data handler
xml_set_character_data_handler($parser,"char");
//Open XML file
$fp=fopen("test.xml","r");
//Read data
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);
?>

Вывод кода:

-- Примечание --
К: Джордж
От: Джон
Заголовок: Памятка
Сообщение: Не забудьте встречу!

Объяснение работы:

  • Инициализируйте XML парсер с помощью функции xml_parser_create()
  • Создайте функции, которые работают с различными программами обработки событий
  • Добавьте функцию xml_set_element_handler() для определения функции, которая будет выполняться при встрече парсером начальных и конечных тегов
  • Добавьте функцию xml_set_character_data_handler() для определения функции, которая будет выполняться при встрече парсером字符ных данных
  • Используйте функцию xml_parse() для анализа файла "test.xml"
  • В случае возникновения ошибок добавьте функцию xml_error_string(), чтобы преобразовать ошибку XML в текстовое объяснение
  • Используйте функцию xml_parser_free() для освобождения памяти, выделенной функции xml_parser_create()

Более подробная информация о парсере PHP Expat

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

  • Предыдущая страница PHP ODBC
  • Следующая страница XML DOM