Главная » Статьи » Веб » Веб-Программирование |
А зачем? Надо! Не, ну на самом деле: xml-файлы - очень полезная штука. И любой профессионал должен… нет, не должен, а обязан знать, как с ними работать. Мы же хотим стать профессионалами? Если Вы на моем блоге, то такое желание у Вас есть. Итак… Мы предполагаем, что знаем, что такое XML и описывать его здесь не будем. Ну, если не знаем, то легко узнаем здесь: http://ru.wikipedia.org/wiki/XML При поиске способов парсинга XML на PHP, я обнаружил простой набор функций в PHP для работы с XML-файлами, который называется «XML Parser Functions». Парсинг начинается с инициализации парсера вызовом функции xml_parser_create:
Потом нам нужно сказать парсеру, какие функции будут обрабатывать попадающиеся ему xml-теги и текстовую информацию в процессе парсинга. Т.е. нужно установить некие обработчики:
Эта функция отвечает за установку обработчиков начала элемента и конца элемента. Например, если в тексте xml-файла встретится комбинация , то функция startElement сработает, когда парсер найдет элемент , а функция endElement - при нахождении . Сами же функции startElement и endElement принимают несколько параметров согласно документации по php:
А как же считывать данные из файла? Мы же пока не видели ни одного параметра для этого ни в одной из функций! А об этом дальше: считывание файла возлагается на плечи программиста, т.е. мы должны использовать стандартные функции для работы с файлами:
Открыли файл. А теперь нужно построчно считывать его и скармливать считываемые строки функции xml_parse:
Здесь заметим две очень важные вещи. Первая - это то, что функции xml_parse в третьем параметре нужно передать флаг считывания последней строки (true - если строка последняя, false - если нет). Второе - это то, что как и в любом деле, мы должны следить здесь за ошибками. За это отвечают функции xml_get_error_code и xml_error_string. Первая функция получает код ошибки, а вторая - по полученному коду возвращает текстовое описание ошибки. Что в результате возникновения ошибки получится - рассмотрим позже. Не менее полезная функция xml_get_current_line_number скажет нам номер текущей обрабатываемой строки в файле. И как всегда мы должны освободить занимаемые системой ресурсы. Для парсинга XML - это функция xml_parser_free:
Вот, основные функции мы рассмотрели. Пора бы посмотреть их на деле. Для этого я придумал xml-файл с очень простой структурой: <root> <info who="моя"> <address ulica="моя улица!!" kvartira="12" dom="15">123</address> <phone>+71234567890</phone> </info> </root> Назовем этот файл data.xml и попытаемся его распарсить с помощью следующего кода:
В результате разработанного нами простейшего скрипта браузер вывел в свое окно следующую информацию: Element: ROOT Element: INFO Attribute: WHO = моя Element: ADDRESS Attribute: ULICA = моя улица!! Attribute: KVARTIRA = 12 Attribute: DOM = 15 Element: PHONE Попробуем испортить XML-файл, заменив тег <phone> на <telephone>, а закрывающий тег оставив прежним: Element: ROOT Element: INFO Attribute: WHO = моя Element: ADDRESS Attribute: ULICA = моя улица!! Attribute: KVARTIRA = 12 Attribute: DOM = 15 Element: TELEPHONE XML Error: Mismatched tag at line 5 Ух ты! Сообщения об ошибках работают! Причем довольно информативные. Эх, я забыл еще одну вещь… Мы же не вывели текст, содержащийся внутри тегов address и phone. Исправляем наш недочет - добавляем текстовый обработчик с помощью функции xml_set_character_data_handler:
И добавляем в код саму функцию-обработчик:
Посмотрим теперь на вывод: Element: ROOT Element: INFO Attribute: WHO = моя Element: ADDRESS Attribute: ULICA = моя улица!! Attribute: KVARTIRA = 12 Attribute: DOM = 15 String: 123 Element: PHONE String: +71234567890 О! Теперь вывели все! Кстати, кто-нибудь заметил, что имена тегов и атрибутов все большими буквами написаны? Странно… они же в нашем xml-файле малыми буквами обозначены. Видимо где-то какие-то настройки установлены, чтобы делать uppercase… Ааа, нашел! Оказывается есть еще функция xml_parser_set_option:
Таким вызовом мы отменяем вывод имен атрибутов и имен тегов большими буквами: Element: root Element: info Attribute: who = моя Element: address Attribute: ulica = моя улица!! Attribute: kvartira = 12 Attribute: dom = 15 String: 123 Element: phone String: +71234567890 В этой статье мы рассмотрели самый простой, но для большинства задач достаточный метод вытаскивания информации из XML-файлов. Я еще слышал про какие-то другие более мощные методы, но их буду рассматривать, когда сам изучу немного ЯндексДирект | |
Просмотров: 748 | Рейтинг: 0.0/0 |
Всего комментариев: 0 | |