Комплексная обработка данных
Данная группа функций разрешает трудиться с данными в формате WDDX (http://www.wddx.org/). WDDX (Web Distributed Data Exchange) — это спецтехнология для «Распределенного обмена данными в web». Данный формат (производный от XML) предуготовлен для переноса данных из одной системы в иную (скажем, обмена данными между ASP, Perl, ColdFusion и PHP). Он разрешает сберегать не только значения, но и типы, и конструкцию трудных данных. Следственно данные WDDX, сериализированные в одной системе, могут применяться в иной. Тип данных определяется механически и приводится к одному из следующих:
В различие от стандартных средств сериализации РНР данные функции применяют формат, поддерживаемый множеством программных сред. <?php $pi = 3.1415926. Пример выведет: <wddxPacket version='1.0'><header comnent='Комментарий
пакета'/> wddx_serialize_value Занесение одного значения в пакет WDDX string wddx_serialize_value (mixed var [, string comment]) Создает пакет WDDX из значения одной переменной var, добавляя в заголовок пакета комментарий comment, и возвращает полученный пакет. <?php print wddx_senalize_valueC"WDDX Пример выведет: <wddxPacket version='1.0'><header comment''PHP
packet'/> wddx_serialize_vars Создание пакета WDDX из нескольких значений string wddx_serialize_vars (mixed varjiame [. mixed ...]) <?php $a = 1; $b - 5.5; $c = arrayC'blue". "orange",
"violet"): Пример выведет: <wddxPacket version= '1.0'><header/><data><st.ruct>
wddx_packet_start Предисловие нового пакета WDDX int wddx_packet_start ([string comment]) Применяется для исходного создания пакета WDDX с автоинкрементным добавлением переменных. Данные после этого добавляются функцией wddx_add_vars(), позже чего пакет должен быть закончен с поддержкой wddx_packet_end(). wddx_packet_end Заключение пакета WDDX string wddx_packet_end (int packetjid) Возвращает содержимое пакета. wddx_add_vars Добавление дальнейшей переменной в пакет WDDX wddx_add_vars (int packet_id, mixed name_var [, mixed ...]) Применяется для последовательного добавления данных в пакет packet_id, сделанный функцией wddx_packet_start(). wddx_deserialize Распаковка пакета WDDX mixed wddx_deseria1ize (string packet) Возвращает данные такого типа, которые были сериализированы. Функции доступны при компиляции с параметром —with-dom=[DIR] при применении библиотеки GNOME xml (не ниже libxml-2.0.0). Модуль определяет следующие константы (типы элементов XML):
Модуль использует следующие классы для работы с интерфейсом DOM документов XML: DomDocument, DomNode, Dtd, DomAttribute, Dom-Namespace, XpathContext, XpathObject. Рекомендуется применять объектный интерфейс, но допустимо применение и функции с префиксом domxml_, как аналога способов DOM объектов. Класс DomDocument:
<?php $doc - new_xmldoc("l 0"); // DomDocument
Сценарий выводит следующее: <?xml version="l 0"?> new_xmldoc Создание нового документа DOM XML object new_xmldoc (string version) Возвращает объект класса DomDocument. Синоним функции domxml_new_xmldoc(). xmldoc Создание DOM-объекта из документа XML object xmldoc (string strXML) Интерпретирует строку, содержащую документ XML, и возвращает объект класса DomDocument. xmldocfile Создание DOM-объекта из файла XML object xmldocfile (string XMLfilename) Интерпретирует файл, содержащий документ XML, и возвращает объект класса DomDocument. xmltree Создание дерева объектов PHP из документа XML object xmltree (string strXML) $sXML='<?xml version="l 0"?> Будет выведено следующее: object(0om0ocument)(5) { Интерфейс DOM domxml_root Приобретение корневого элемента документа XML object domxml_root (resource DomDocument) Возвращает объект класса DomNode. if($dom = xmldoc($xmlstr)) $root = $dom->root(): domxml_add_root Создание корневого элемента DOM XML resource domxml_add_root (resource DomDocument. string name) Возвращает объект класса DomNode, сделанный внутри объекта DomDocument. domxml_dumpmem Создание XML документа из объекта DOM string domxml_dumpmem (resource DomDocument) Возвращает текстовое представление документа. domxml_children Приобретение массива вложенных объектов раздела array domxml_crri1dren (object node) Возвращает массив дочерних объектов объекта класса DomNode. $doc = new_xmldoc("1.0"): // DomDocument Пример выводит следующее: <?xml version="l 0"?> <ML> domxml_new_child Создание сегменты тега resource domxml_new_chiId (string name, string content) Возвращает объект класса DomNode, сделанный внутри объекта Oom-Node. domxml_ attributes Приобретение признаков узла array domxml_attributes (resource node) Возвращает объект класса DomDocuraent. $doc = new_xmldoc("1.0"): Пример выведет следующее: <?xml version="1.0"?> <ML><Hl>1212</Hl> domxml_getattr Приобретение признака узла object domxml_getattr (resource node, string name) Возвращает значение признака узла. В документации функция отчего-то значится под именем domxml_get_attribute(). См. пример выше. domxml_set_attribute Установка признака узла object domxml_set_attribute (resource node, string name, string value) См. пример выше. Имена признаков рассматривают регистр символов. XML (extensible Markup Language) — формат обмена структурированными данными в пространстве web; эталон, определенный Консорциумом World Wide Web (W3C). Информацию о XML и связанных спецтехнологиях дозволено получить по адресу http://www.w3.org/XML/. Для понимания материала главы нужно разбираться в синтаксисе XML Для работы с документами XML применяются два метода.
1-й метод рассмотрен в предыдущей главе. Функции, описанные в данной главе, реализуют 2-й метод обработки. Событийная модель обработки (интерпретации) подразумевает следующую схему функционирования программы.
Подметьте, что интерпретатор предуготовлен для обработки документа, но не для его проверки; документ должен соответствовать грамматике XML (и правилам DTD). В РНР интерпретатор XML использует библиотеку expat (ее также использует Apache-1.3.9 и дальнейшие версии), см.: http://www. jclark.com/xml/. Скомпилировать РНР с помощью expat дозволено, применяя параметр --with-xml. Для документов поддерживаются кодировки US-ASCII, ISO-8859-1 (по умолчанию), UTF-8 (UTF-16 не поддерживается). Разделяют начальную и целевую кодировки. Начальная кодировка — это комплект символов документа (ее дозволено изменять в процессе интерпретации). (Внутри РНР символы неизменно хранятся в кодировке UTF-8, позволяется применять символы размером до 21 бита.) В функции-обработчики данные передаются в целевой кодировке (для всех типов данных). При нахождении в документе-символа, не соответствующего начальной кодировке, выдается оплошность; а если символ не может быть представлен в целевой кодировке, то он заменяется на знак вопроса. Истолковывание (по умолчанию) не рассматривает регистр имен тегов, то есть в функции обработки символы передаются преобразованными к верхнему регистру. Для отключения этого используйте: xml__parser_set_option($xml_parser. XML_OPTION_CASE_FOLDING. 0); Для интерпретатора дозволено определить следующие виды функций-обработчиков:
Коды ошибок Модулем интерпретатора XML определяются следующие константы кодов ошибок (возвращаемые функцией xml_parse()):
Примеры Следующие примеры показывают возможности интерпретации документов XML. Распечатка конструкции XML документа Сценарий выводит конструкцию на основе поиска открывающих и закрывающих тегов, применяя в качестве форматирования отступы. Sfile = "data.xml": Sdeptti = аггау() Преобразование тегов XML в HTML $file = "data xml '. $jndp_array = arrayt Обработка особых конструкций XML Пример показывает обработку подключенных внешних файлов и инструкций обработки. Использует при итоге разметку HTML. $file = "xmltest.xml"; function trustedFile(Sflle)
{ Содержимое файла xmltest.xml: <?xml version='1.0">> Подключаемый файл xmltest2.xml: <?xml version="1.0"?> <!DOCTYPE foo
[ xml_parser_create Инициализация интерпретатора XML int xml_parser_create ([string encoding]) Необязательным доводом дозволено указать кодировку, котор дует применять: ISO-8859-1 (по умолчанию), US-ASCII, U Возвращает дескриптор сделанного интерпретатора (исполы последующими функциями) либо FALSE — при ошибке. xml_set_object Разрешение применения интерпретатора XML внутри объекта void xml_set_object (int parser, object Subject) Функция разрешает применять в качестве всех функций oi чиков способы объекта object. <?php class xml { var Sparser. При запуске пример выведет: ** Tag open: stnng(l) "A" array(l) { f"IO"]=>
stnng(2) "99"} xml_set element_handler Предназначение обработчиков открывающего и закрывающего тега int xml_set_element_hand1er (int parser, string startElementHandler, string endElementHandler) В доводах startElementHandler и endElementHandler указываются имена пользовательских функций, вызываемых во время интерпретации (при вызове xml_parse()), когда интерпретатор встречает открывающие и закрывающие теги. Функции обязаны принимать следующие доводы:
Довод name содержит имя тега, attribs — ассоциативный массив, содержащий признаки тега (если они имеются). xml_set_character_data_handler Предназначение обработчика данных int xml_set_character_data_handler (int parser, string handler) Устанавливает пользовательскую функцию с именем handler как обработчик данных документа. Данными считается все то, что находится между тегами, включая пробелы. Эта функция будет вызываться во время интерпретации (при вызове xml_parse()). Она должна соответствовать прототипу: handler (int parser, string data). В доводе data функция получает нынешний блок данных. xml_set_processing_instruction_handler Предназначение обработчика инструкций обработки int xml_set_processing_instruction_handler (int parser, string handler) Инструкции обработки имеют дальнейший формат: <?target data . ?> Применяя данный формат, дозволено вставлять в XML документы РНР-кода, но последовательность, обозначающая финальный тег (?>), не должна встречаться в середине кода, напротив оставшаяся часть кода будет рассматриваться интерпретатором как обыкновенные данные. Функция, устанавливаемая в качестве обработчика, должна соответствовать дальнейшему прототипу: handler (int parser, string target, string data) В доводе target функция получает маркер, определяющий тип кода (это может быть не только «php», но и иной, помимо зарезервированного типа «xml»). В доводе data передается текст каждого кода, тот, что содержится внутри тега. xml_set_default_handler Установка обработчика по умолчанию int xml_set_default_handler (int parser, string handler) Устанавливаемым обработчиком будут обрабатываться все данные, которые не могут быть обработаны другим зарегистрированным обработчиком. Функция обработчика должна соответствовать дальнейшему прототипу: handler (int parser, string data). В доводе data функция получает блок данных для обработки. xml_set_unparsed_entity_decl_handler Установка обработчика необрабатываемых данных int xml_set_unparsed_entity_decl_handler (int parser, string handler) Данные такого типа (NDATA) определяются спецификацией XML 1.0 (раздел 4.2.2) и имеют сходственный дальнейшему формат: <!ENTITY name {publicld | systemld} NDATA notationName> Функция обработчика должна соответствовать дальнейшему прототипу: handler (int parser, string entityNarae, string base, string systemld, string publicld, string notationName). В доводе entityName функция получает тип тега, в base в реальное время неизменно содержится пустая строка. В доводах systemld и publicld содержатся соответственно системный и публичный внешние идентификаторы. Довод notationName содержит имя нотации (см. функцию xml_set_notation_decl_handler()). xml_set notation decl_handler Установка обработчика объявлений нотаций int xml_set_notation_decl_handler (int parser, string handler) Нотации (являющиеся частью документов DTD) описаны в спецификации XML 1.0 (раздел 4.7) и имеют дальнейший формат: <!NOTATION na'ie [systemlcl \ publ,cld}> Функция обработчика должна соответствовать дальнейшему прототипу: handler (int parser, string notationName, string base, string systemld, string publicld) В доводе notationName функция получает имя нотации, в base в реальное время неизменно содержится пустая строка. В доводах systemld и publicld содержатся соответственно системный и публичный внешние идентификаторы. xml_set_external_entity_ref_handler Установка обработчика внешних ссылок int xml_set_external_entity_ref_handler (int parser, string handler) Функция обработчика нотаций, содержащих внешние ссылки, должна возвращать целочисленное значение и соответствовать дальнейшему прототипу: int handler (int parser, string openEntityNames, string base, string systemld, string publicld). Если обработчик возвращает значение FALSE (либо не возвращает никакого), интерпретатор XML прекращает интерпретацию и функция xml_get_error_code() возвращает значение XML_ERROR_EXTERNAL_ENTITY_ HANDLING. В доводе openEntityNames функция получает список имен, открываемых для рекурсивной интерпретации (в виде строки, где разделителями являются пробелы), в base в текущее время неизменно содержится пустая строка. В доводах systemld и publicld содержатся соответственно системный и публичный внешние идентификаторы. xml_parse Предисловие интерпретации документа XML int xml_parse (int parser, string data [, int isFinal]) Функция дозволяет обрабатывать документ XML по частям (неоднократно вызывая данную функцию и передавая всякий блок данных в доводе data), тогда при обработке последней части документа в доводе ispinal следует передать значение TRUE. До начала интерпретации следует инициализировать интерпретатор parser и установить все функции-обработчики, которые будет вызывать данная функция. Функция возвращает значение TRUE, если истолковывание блока документа прошла удачно. В случае ошибки возвращается значение FALSE, и после этого может быть получена информация об ошибке с поддержкой функций xml_get_error_code(), xml_error_string(), xml _get_current_line_number (), xml _get_current_col umnjiumber (), xml _get_ current_ byte_index(). xml_get_error_code Приобретение кода ошибки интерпретатора XML int xml_get_error_code (int parser) Перечисление возвращаемых кодов ошибок (констант) см. в начале главы. xml_error_string Приобретение изложения ошибки по ее коду string xml_error_string (int code) Функция разрешает получить в строке изложение кода ошибки (возвращаемое функцией xml_get_error_code()). Если код недействителен, возвращается FALSE. xml_get_current_line_number Приобретение номера нынешней интерпретируемой строки документа int xml_get_current_line_number (int parser) xml_get_current_column_number Приобретение номера обрабатываемого байта в нынешней интерпретируемой строке документа int xml_get_current_column_number (int parser) xml_get_current_byte_index Приобретение позиции нынешнего байта документа int xml_get_current_byte_index (int parser) Нумерация байтов начинается с 0. xml_parse_into_struct Занесение документа XML в структурированный массив int xml_parse_into_struct (int parser, string data, array &values, array &index) Функция заносит XML-документ в 2 параллельные конструкции: массив values содержит конструкцию тегов и их содержимое, a Index содержит вспомогательные индексы для упрощения нахождения исходных и финальных тегов в первом массиве (массивы следует передавать по ссылке). $simple = "<para><note>simple note</note> При запуске сценарий выводит: Index Arrayf [PARA] » Array ( [0] => 0 [1] =>
2 ) Истолковывание трудных документов становится массивной при применении обработчиков. Правда эта функция и не создает объект, сходственный DOM, она генерирует конструкцию, которую легко преобразовать в древовидную. Дозволено, скажем, создавать объекты, представляющие данные. Дальнейший пример показывает создание объектов из xml базы данных химических элементов. Файл, moldb.xml <?xml version="1.0"7> <moldb> Сценарий parsemoldb.php, интерпретатор файла moldb.xml: <?php class AminoAcid { // класс аминокислот После запуска сценария переменная $db будет содержать массив AminoAcid объектов и будет выведено: ** Database of AminoAcid objects: Array ( xml_parser_free Закрытие интерпретатора XML string xml_parser_free (int parser) xml_parser_set_option Установка параметра XML-интерпретатора int xml_parser_set_option (int parser, int option, mixed value) В доводе option константой задается устанавливаемый параметр, а в value — ее новое значение. Допустимые параметры:
xml_parser_get_option Приобретение параметра интерпретатора XML mixed xml_parser_get_option (int parser, int option) См. также: xml_parser_set_option(). utf8_decode Реформирование строки UTF-8 в ISO-8859-1. string utf8_decode (string data) См. также: utf8_encode(). utf8_encode Кодирование строки ISO-8859-1 в UTF-8 string utf8_encode (string data) Возвращает строку в формате UTF-8. UTF-8 — эго формат представления текста Unicode, разрешающий представить большее число символов, чем кодировка ASCII. Первые 127 символов ASCII в кодировке UTF-8 имеют одинаковое представление, а дальнейшие (обыкновенно это символы национальных языков) кодируются следующими методами: Кодировка UTF-8
Как видно, размер символа может быть от 1 до 4 бант; b представляет один бит данных. XSLT (Extensible Stylesheet Language (XSL) Transformations) — язык реформирований XML-документов в другие XML-документы; эталон, определенный Консорциумом World Wide Web (W3C). С документацией дозволено ознакомиться по адресу: http://www.w3.org/TR/xslt. Спецтехнология предуготовлена для распределения оглавления и формы представления документов с поддержкой образцов реформирования XSL. Традиционно документы XML преобразовывают в формат HTML. Это растяжение использует Sabloton и expat (http://www.gingerall. com/). В UNIX при компиляции PHP запустите configure с ключом -with-sablot. xslt_create Инициализация нового процессора XSL resource xslt_create(void); Функция возвращает дескриптор, применяемый последующими XSL-функциями. xslt_free Закрытие процессора XSLT void xslt_free (resource xh) xslt_openlog Предназначение журнала сообщений процессора XSLT bool xslt_openlog ([resource xh, string logfile, int loglevel]) В указанный файл logfile будут записываться все сообщения об ошибках. xslt_closelog Закрытие и чистка журнала сообщений процессора XSLT bool xslt_closelog (resource xh) xslt_errno Приобретение номера нынешней ошибки процессора XSLT int xslt_errno ([int xh]) xslt_error Приобретение изложения нынешней ошибки mixed xslt_error ([int xh]) xslt_fetch_result Приобретение преобразованных данных из буфера string xslt_fetch_result ([int xh, string result_name]) Если имя буфера не указывается в result_name, то подразумевается «/jresult». xslt_output_ begintransform Предисловие реформирования XSLTc итогом void xslt_output_begintransform (string xslt_filename) Функция принуждает преобразовывать все выводимые данные с учетом образца из файла xslt_filename. После этого следует вызвать функцию xslt_output_endtransform(). <?php $xsl_file = "article.xsl"; xslt_output_endtransform Заключение реформирования, начатого xslt_output begintransform void xslt_output_endtransform (void); Эту функцию следует вызвать для того, дабы вывести модифицированный документ. xslt_process Реформирование документа XML с поддержкой образца XSL bool xsH_process (string xsl_data, string xirHI_data, string result) В доводе xsl_data указывается текст образца XSLT, а в xml_data — текст документа XML. Возвращает TRUE либо FALSE — при ошибке. См. также: xslt_errno() и xslt_error() для приобретения кодов ошибки. <?php JxslData = xslt_run Использование XSLT к файлу bool xslt_run ([resource xh, string xslt_file. string xmt_data_file. string result, array xslt_params, array xslt_args]]]) Преобразовывает файл xm!_data_file, применяя к нему образец из файла xslt_file. Образец получает доступ к массиву параметров xslt_ params и доводов xstt_args. Итог XSLT-трансформации заносится в именованный буфер (по умолчанию «_result»). xslt_set_sax_handler Установка обработчиков SAX для процессора XSLT bool xslt_set_sax_handler (resource xh. array handlers) xslt_transform Выполнение трансформации XSLT bool xslt_transforn> (string xsl, string xml, string result, string params, string args, string resultBuffer) Предоставляет расширенный интерфейс библиотеки Sablotron без необходимости применения источников API. |