解析器 Expat XML PHP
Рекомендуемые курсы:
Внутренний парсер 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.