sax

SAX парсер

В работе парсера SAX можно выделить 4 шага:

  • Создается парсер, т.е. тот, кто будет читать, с помощью функции xml_parser_create. В круглые скобки можно передать необязательный параметр — кодировка. И независимо от той кодировки, в какой у нас xml-документ, парсер сконвертирует его в ту, какую укажем мы. Все есть три кодировки: ISO-8859-1, UTF-8 и US-ASCII, которые парсер поддерживает. Лучше зачитывать в UTF-8.
  • Определяем функции, которые привяжем к событиям, которые парсер будет вызывать. Например, определяем функцию, которую парсер будет вызывать при нахождении открывающего тега (строка №5). Внутри круглых скобок указываем 3 переменные. Т.е. вызывая эту функцию , парсер будет туда передавать: 1)самого себя ($parser из строки №1); 2) имя элемента (переведет по умолчанию в верхний регистр); 3) ассоциативный массив атрибутов, если они там есть.

Далее идет функция, которая срабатывает на закрывание тега (стровка №6). В качестве параметров прилетят: сам парсер и имя элемента.

Далее функция на нахождение текстового узла (строка №7). Атрибуты: придет парсер и сам текст.

  • Регистрация функций. Т.е. надо объяснить парсеру, когда какую функцию вызывать. Функции открытия и закрытия тегов регистрируем с помощью функции — xml_set_element_handler, куда передается наш парсер, в виде строки имя функции на открывающий и закрывающий тег. Функцию для текстовых данных регистрируем с помощью функции — xml_set_character_data_handler. Передаем туда парсер и имя нашей функции в виде строки. См. строки №9,10. Получить файл в виде строки можно так: file_get_contents (example.xml).
  • Запуск парсера. Строка №12. Туда передается наш парсер и xml-документ в виде строки. Т.е. файл парсер не читает, сначала файл надо зачитать в строку, а затем передать парсеру на чтение.
//Создание парсера
$parser = xml_parser_create ("encodig");
//encoding: ISO-8859-1, UTF-8 и US-ASCII
//Определение функций обработки
function onStart($xml, $tag, $attributes){}
function onEnd($xml, $tag){}
function onText($xml, $data){}
//Регистрация функций
xml_set_element_handler ($parser,"onStart","onEnd");
xml_set_character_data_handler ($parser,"onText");
//Запуск парсера
xml_parse($parser, file_get_contents(example.xml)); //получим файл в виде строки



Добавить комментарий

Ваш e-mail не будет опубликован.