Что такое код xml_set_default_handler

Содержание

FPublisher

Web-технологии: База знаний

Документация PHP

Event Handlers

The XML event handlers defined are:

Supported XML handlers
PHP function to set handler Event description
xml_set_element_handler() Element events are issued whenever the XML parser encounters start or end tags. There are separate handlers for start tags and end tags.
xml_set_character_data_handler() Character data is roughly all the non-markup contents of XML documents, including whitespace between tags. Note that the XML parser does not add or remove any whitespace, it is up to the application (you) to decide whether whitespace is significant.
xml_set_processing_instruction_handler() PHP programmers should be familiar with processing instructions (PIs) already. is a processing instruction, where php is called the «PI target». The handling of these are application-specific, except that all PI targets starting with «XML» are reserved.
xml_set_default_handler() What goes not to another handler goes to the default handler. You will get things like the XML and document type declarations in the default handler.
xml_set_unparsed_entity_decl_handler() This handler will be called for declaration of an unparsed (NDATA) entity.
xml_set_notation_decl_handler() This handler is called for declaration of a notation.
xml_set_external_entity_ref_handler() This handler is called when the XML parser finds a reference to an external parsed general entity. This can be a reference to a file or URL, for example. See the external entity example for a demonstration.

Последние поступления:

ТехЗадание на Землю

Размещена 14 марта 2020 года

Пpоект Genesis (из коpпоpативной пеpеписки)

Шпаргалка по работе с Vim

Размещена 05 декабря 2020 года

Vim довольно мощный редактор, но работа с ним не всегда наглядна.
Например если нужно отредактировать какой-то файл например при помощи crontab, без знания специфики работы с viv никак.

Ошибка: Error: Cannot find a val >Размещена 13 сентабря 2020 года

Если возникает ошибка на centos 5 вида
YumRepo Error: All mirror URLs are not using ftp, http[s] or file.
Eg. Invalid release/

Linux Optimization

Размещена 30 июля 2012 года

Xml_set_default_handler

Php функции


Php скрипты


xml_set_default_handler

(PHP 3 >= 3.0.6, PHP 4, PHP 5)

xml_set_default_handler — Set up default handler

Description

bool xml_set_default_handler ( resource parser, callback handler )

Sets the default handler function for the XML parser parser . handler is a string containing the name of a function that must exist when xml_parse() is called for parser .

The function named by handler must accept two parameters: handler ( resource parser, string data )

The first parameter, parser , is a reference to the XML parser calling the handler.

The second parameter, data , contains the character data. This may be the XML declaration, document type declaration, entities or other data for which no other handler exists.

If a handler function is set to an empty string, or FALSE, the handler in question is disabled.

TRUE is returned if the handler is set up, FALSE if parser is not a parser.

Замечание: В качестве аргумента вместо имени функции может быть передан массив, содержащий ссылку на объект и имя метода.

User Contributed Notes

phillip
27-Apr-2005 01:13

it seems to me that in PHP5 the function defined as default-handler (using xml_set_default_handler()) doesen’t get passed the cdata anymore:

i.e.:
xml_set_element_handler( $this ->parser, ‘parseSTART’, ‘parseEND’);
xml_set_default_handler( $this ->parser, ‘parseDEFAULT’);
function parseSTART() < . >
function parseEND() < . >
function parseDEFAULT()

under PHP5, parseDEFAULT will NOT get passed any cdata, but unter PHP4 it will. at least that’s my take on the strange stuff (not) happening after migrating to PHP5.

my solution was to add a xml_set_character_data_handler( $parser , ‘parseDEFAULT’). it worked for me.

PHP XML Parser xml_set_default_handler splits special character

The XML parser of PHP calls the default handler function twice when it encounters a special character in a string and therefore splits the string. I’ve tried to solve it using different encodings on the XML header as well in the PHP code, but it still splits the string:

Example of the XML:

One would expect:

But the result is

I would like not to have the line splitted, so any idea what the solution is?

1 Answer 1

The xml_parser does create multiple events here for a reason I didn’t finally understood fully, I think this is because of the encoding auto-detection.

You can deal with that by creating your own parser class. This is generally useful anyway, not only in this case. But for this case it’s especially so that you can put together the text of the label which get’s distributed over multiple events.

The basic work is making the callback functions public function of a class, and register these functions then.

Then each time the label tag opens, a temporary store is reset. When text appears, it’s added to that temporary store. If the label tag then closes, you can pass this text to a new «event» this time the function you’re looking for with it’s text:

PHP и XML

XML — это сокращение от extensible Markup Language (расширяемый язык разметки). Язык XML — подмножество гораздо более сложного языка SGML (Standard Generalized Markup Language — стандартный обобщенный язык разметки), но для использования XML не требуется что-либо знать о языке SGML. Язык XML определяет синтаксис создания структурированных документов, доступных для чтения людьми и компьютерами.

Язык XML позволяет создавать независимые от приложения форматы обмена данными. Такая возможность становится предпосылкой появления в будущем все более эффективных и простых методов разработки программ для веб.

Возможно, проще всего можно понять назначение языка XML, представив себе все те области обработки данных, в которых не может применяться язык HTML. Безусловно, HTML — это также язык разметки, но документы HTML никак нельзя назвать структурированными. Дескрипторы HTML (формально называемые тегами) и атрибуты представляют собой всего лишь простые идентификационные маркеры, распознаваемые браузером.

Например, пара согласованных дескрипторов

Из того факта, что в коде HTML отсутствует структура, следует, что машины поиска практически не могут воспользоваться указаниями, взятыми из самого кода и касающимися того, что является самым важным на каждой странице сайта или что означает каждый фрагмент текста в связи с другими фрагментами. Поэтому в машинах поиска используются различные методы выдвижения гипотез в отношении содержимого текста, но ни один из этих методов не гарантирует защиты от случайных ошибок.

Обычно те, кто впервые приступает к изучению языка XML, ознакомившись с этими предварительными сведениями, хотят сразу же рассмотреть пример кода XML. В действительности код XML во многом напоминает код HTML. В частности, пользователи языка HTML могут легко понять структуру простого файла XML, подобного приведенному ниже:

Вполне очевидно, что в коде XML имеются разнообразные дескрипторы и атрибуты, а также просматривается такая же иерархическая структура, как и в коде HTML. В языке XML каждая пара дескрипторов называется элементом.

При формировании документа XML необходимо учитывать описанные ниже минимальные требования к его структуре:

  • В документе должен быть предусмотрен лишь единственный корневой элемент, который включает все другие элементы, подобно элементу в документах HTML. Иногда корневой элемент называют также элементом документа.
  • Структура вложения элементов должна быть иерархической. Это означает, что структура документа с дескрипторами является допустимой, а структура — нет. В первом примере очевидно, что элемент полностью включает элемент , а во втором примере элементы и перекрываются. Язык XML не допускает, чтобы дескрипторы включаемого элемента выходили за пределы дескрипторов включающего элемента (т.е. перекрывались).
  • Все элементы должны иметь закрывающий дескриптор (в этом состоит отличие XML от HTML, в котором допускается применение некоторых незакрытых элементов). Задача закрытия элемента может быть решена с использованием закрывающего дескриптора (например, ), как в языке HTML, или средства XML не требующим закрывающего дескриптора (например, ).
  • Элементы могут содержать другие элементы, текст и прочие данные. Если элемент включает фрагменты текста, напоминающие код XML (допустим, ), но не являются таковыми, или требуется исключить синтаксический анализ какого-то символа в тексте, то этот символ должен быть обозначен символами переключения на другой режим обработки.

Кроме перечисленных выше обязательных требований, которые относятся к категории так называемых требований по обеспечению формальной правильности, стандарт XML указывает также, что документы XML должны начинаться с идентификационного объявления XML. Это объявление представляет собой инструкцию по обработке, в которой указаны тип MIME и номер версии, как в примере . Это объявление не обязательное, но некоторые синтаксические анализаторы, не обнаружив его, выводят сообщение об ошибке. Кроме того, код XML чувствителен к регистру, а в некоторых версиях XML, таких как XHTML, требуется, чтобы имена дескрипторов и атрибутов состояли из строчных букв. В самом стандарте XML нет абсолютно никаких указаний в отношении дескрипторов с именами, состоящими из строчных букв, но всегда рекомендуется использовать дескрипторы и атрибуты, заданные в нижнем регистре, если нет весомых оснований для использования букв другого регистра.

Практическое применение языка XML

Выше были описаны основные преимущества языка XML, а в данном разделе рассматриваются основные области применения XML. Эта тема — довольно сложная. С точки зрения теории язык XML используется в трех направлениях: манипулирование данными и хранение данных; передача данных из одного программного приложения в другое; отображение страниц XML в браузере или в другом приложении с помощью директив вывода на дисплей, заданных в виде таблиц стилей.

На практике почти никто не использует язык XML для хранения данных в качестве основного средства представления данных, поскольку для представления данных повсеместно применяются реляционные структуры данных и язык SQL. Манипулирование данными с помощью XML обеспечить возможно, хотя все еще трудно (например, существует возможность редактировать документы, создавая и манипулируя узлами XML, а не внося изменения непосредственно в текст), но и в этом случае многие пользователи не находят особых преимуществ в подобном подходе. В последние несколько лет достигнуты значительные успехи в части методов представления кода XML в браузере, как правило, в форме XHTML, но реализация и этого подхода сопряжена с преодолением значительных сложностей.

Поэтому в настоящее время остается наиболее перспективным такое основное направление применения языка XML, как обмен данными между приложениями и организациями. Как оказалось, именно в этой области язык PHP может оказать самое непосредственное содействие. Например, с помощью программы C могут быть выполнены некоторые операции с данными, полученными из базы данных, затем осуществлен вывод результатов в коде XML, который может быть преобразован с помощью языка PHP в код HTML для отображения в браузере или другом приложении.

Такая организация потока данных, в которой применяется несколько промежуточных этапов, фактически имеет смысл, если незаметно для пользователя должен быть выполнен существенный объем вычислений. Дело в том, что, как правило, нецелесообразно создавать одну большую программу, которая выполняла бы сложные операции и выводила код HTML, если вместо этого можно воспользоваться несколькими программами.

Кроме того, язык PHP позволяет считывать данные из хранилища данных и непосредственно выводить сами документы XML. Необходимость в этом может возникнуть при передаче информационного наполнения с одного веб-сайта на другой, как, например, при распространении информационных материалов. К тому же указанные функциональные возможности часто позволяют помочь неквалифицированным пользователям подготавливать формально правильные документы XML с помощью интерфейса в виде веб-формы. Короче говоря, в настоящее время вывод кода XML, по-видимому, относится к наиболее распространенной категории задач PHP, связанных с XML.

Сравнение API-интерфейсов SAX и DOM

Для обработки кода XML и документов XML чаще всего применяются три основных типа API-интерфейсов: SimpleXML, объектная модель документа (Document Object Model — DOM) и простой API-интерфейс для XML (Simple API for XML — SAX). Все три этих модуля теперь включены во все дистрибутивы PHP.

Для синтаксического анализа и модификации любого документа XML можно использовать любой из трех API-интерфейсов — DOM, SAX или SimpleXML. А для создания или дополнения документа XML исключительно с помощью интерфейса PHP (иными словами, без написания каких-либо фрагментов документа XML вручную) необходимо использовать DOM. Каждый из API-интерфейсов имеет свои преимущества и недостатки, которые описаны ниже:

API-интерфейс SAX является менее трудоемким и более простым в изучении, но документ XML рассматривается в нем, по существу, как поток строковых данных. Таким образом, если, например, необходимо выполнить синтаксический анализ текста рецепта, то язык PHP позволяет быстро написать синтаксический анализатор SAX и с помощью него, допустим, обозначить полужирным шрифтом элементы списка ингредиентов. Но решить задачу добавления полностью нового элемента или атрибута будет очень сложно, и даже модификация значения одного конкретного ингредиента окажется трудоемкой.

API-интерфейс SAX очень хорошо подходит для выполнения единообразных задач, в которых требуется применение одной и той же операции ко всем элементам определенного типа, например, для замены конкретного дескриптора элемента дескрипторами HTML в ходе преобразования документа XML в документ HTML, предназначенный для вывода на экран. Синтаксический анализатор SAX обрабатывает документ один раз, от начала до конца, поэтому не позволяет возвращаться и выполнять действия с учетом входных данных, находящихся в документе вслед за обрабатываемым элементом.

Расширение DOM, предусмотренное в языке PHP, позволяет считывать файл XML и создавать в памяти дерево объектов, допускающее обход. Это дает возможность начать обработку с самого документа или с любого элемента документа (элементы в терминологии DOM именуются узлами), после чего получать или задавать значения дочерних и родительских узлов, а также текстовое информационное наполнение в каждой части дерева.

Объекты DOM можно сохранять в контейнерах, а также выводить их в виде текста. API-интерфейс DOM языка XML обеспечивает наилучшие результаты, если доступен весь документ XML. А если код XML поступает очень медленно в виде потока или требуется обработать много разных фрагментов XML как разделы одного и того же документа, то целесообразно использовать API-интерфейс SAX. Кроме того, в расширении DOM предусматривается формирование дерева в памяти, поэтому для обработки больших документов могут потребоваться значительные ресурсы.

SimpleXML

API-интерфейс SimpleXML позволяет быстро открыть файл XML, преобразовать некоторые из обнаруженных в нем элементов в собственные типы PHP (переменные, объекты и т.д.), а затем применить к этим собственным типам необходимые операции, как и в обычной программе. API-интерфейс SimpleXML позволяет обойтись без сложностей, связанных с выполнением большого количества дополнительных вызовов, которые требуются в API-интерфейсах SAX и DOM, и ограничиться меньшим объемом памяти. Кроме того, SimpIeXML часто предоставляет самый простой способ быстрого получения доступа к данным XML.

Тем не менее SimpIeXML имеет некоторые ограничения, в частности, этот API-интерфейс иногда ведет себя непредсказуемо при обработке атрибутов и глубоко вложенных элементов.

API-интерфейс DOM

API-интерфейс DOM объектной модели документа представляет собой всесторонне развитый API-интерфейс для создания, редактирования и синтаксического анализа документов XML. Сама технология DOM разработана в соответствии с рекомендациями консорциума W3C.

По существу, идея этого интерфейса состоит в том, что каждый документ XML можно рассматривать как иерархию узлов, напоминающую ветви дерева. С помощью указанного интерфейса можно создать представление структуры документа в любой программе, начиная с корневого элемента, по отношению к которому все другие элементы являются дочерними. За элементами могут быть также закреплены атрибуты и символьные данные. Исходная информация для создания дерева считывается в память из файла XML, после чего могут быть проведены манипуляции с помощью языка PHP, а содержимое дерева записано в другой файл XML или сохранено в контейнере.

В основе расширения DOM языка PHP лежит синтаксический анализатор gnome-libxml2 (аналогичный программе libxml2 системы Gnome), поскольку считается, что эта программа требует меньше объема памяти, чем другие.

Поскольку DOM XML — это единственный полностью объектно-ориентированный API-интерфейс в языке PHP, для его использования необходимо иметь определенное представление об объектно-ориентированном программировании. Так как количество объектов и методов в этом API-интерфейсе ограниченно, не нужно иметь особо глубокие знания объектно-ориентированного программирования, чтобы успешно применять DOM XML.

Применение DOM XML

Способы использования API-интерфейса DOM зависят от поставленных целей, но чаще всего требуется выполнить описанные ниже действия:

  1. Открыть новый документ DOM XML или прочитать его, поместив в оперативную память.
  2. Выполнить манипуляции с документом на уровне узлов.
  3. Вывести результирующий документ XML в виде строки или записать его в файл. Эта операция приводит также к освобождению памяти, используемой синтаксическим анализатором.

Ниже приведен простой пример, который демонстрирует использование некоторых простых функций DOM XML. Убедитесь в том, что права доступа к файлам пользователя, в учетной записи которого работает сервер, определены таким образом, что веб-сервер может записать файл в указанный каталог:

В результате выполнения этого кода генерируется XML-файл.

Функции DOM

В таблице ниже приведены наиболее распространенные функции DOM. Эти функции необходимо вызывать, прежде чем использовать какие-либо из прочих функций DOM XML!

Функции DOM XML верхнего уровня

Функция Назначение
domxml_open_mem() Принимает в качестве параметра строку, содержащую документ XML. Выполняет синтаксический анализ документа и создает объект Document
domxml_open_file() Принимает в качестве параметра строку, содержащую имя файла XML. Выполняет синтаксический анализ файла и создает объект Document
domxml_xmltree() Принимает в качестве параметра строку, содержащую документ XML. Создает дерево объектов PHP и возвращает объект DOM. Дерево объектов, возвращаемое этой функцией, допускает только чтение
domxml_new_doc() Создает новый, пустой документ XML в памяти. Возвращает объект Document

В таблице ниже приведены наиболее важные классы API-интерфейса DOM:

Классы DOM XML

Класс Назначение
DomDocument Инкапсулирует документ XML. Содержит корневой элемент и определение DTD, если таковое имеется
DomNode Инкапсулирует узел, или элемент. Узел может быть корневым или любым элементом в пределах корневого элемента. Узлы могут содержать другие узлы, символьные данные и атрибуты
DomAttr Инкапсулирует атрибут узла. Атрибут — это определяемая пользователем характеристика узла

В следующей таблице приведены наиболее важные методы класса DomDocument:

Методы классов DomDocument, DomNode и DomAttr

Метод Назначение
DomDocument -> createElement() Создает новый элемент, дескриптором которого является переданная строка. Этот элемент необходимо присоединить к другому элементу с помощью команды DomNode->appendChild()
DomDocument -> createTextNode() Создает новый текстовый узел (объект DomText). Этот узел необходимо присоединить к другому узлу с помощью команды DomNode->appendChild()
DomDocument -> save() Выводит документ XML из памяти в указанный файл
DomDocument -> saveXML() Выводит документ XML из памяти в строку. Необязательным параметром является объект DomNode
DomNode -> appendChild() Присоединяет узел к другому узлу
DomNode -> removeChild() Удаляет дочерний узел
DomAttr -> name() Возвращает имя атрибута
DomAttr -> value() Возвращает значение атрибута

API-интерфейс SAX

Так называемый простой API-интерфейс для XML широко применяется для синтаксического анализа документов XML. Данный API-интерфейс основан на использовании событий. Это означает, что синтаксический анализатор SAX вызывает указанные ему функции после обнаружения того, что активизировалось определенное событие в потоке событий.

История развития API-интерфейса SAX является очень интересной, особенно в сопоставлении с API-интерфейсом DOM. Прежде всего, API-интерфейс SAX не разрабатывался под эгидой какой-либо официальной организации по стандартизации, а был создан группой программистов, объединившихся вокруг списка рассылки XML-DEV, многие из которых уже реализовали свои собственные синтаксические анализаторы XML (в первую очередь на языке Java) без применения стандартного API-интерфейса.

API-интерфейс SAX действует no принципу использования множества обработчиков прерываний от событий. Эти обработчики прерываний задаются с помощью кода PHP. По мере того как синтаксический анализатор проходит по документу XML, распознаются такие фрагменты кода XML, как элементы, символьные данные и внешние сущности. Каждый случай распознавания активизируется как событие. Если синтаксическому анализатору предоставлена функция, подлежащая вызову после обнаружения какой-то конкретной разновидности событий, то синтаксический анализатор на время приостанавливает обработку такой функции после возникновения указанного события.

Полученные синтаксическим анализатором данные, которые связаны с определенным событием, предоставляются вызванной функцией. После завершения работы функции обработки события синтаксический анализатор SAX продолжает последовательную обработку документа, вызывая связанные с событиями функции до тех пор, пока не будет достигнут конец документа. Этот процесс остается однонаправленным на протяжении всей обработки, от начала до конца документа, поскольку синтаксический анализатор не может возвращаться назад или повторно обрабатывать какую-либо часть документа.

До выхода версии 5 в языке PHP использовался программный продукт expat Джеймса Кларка (James Clark) — широко применяемый инструментарий создания синтаксических анализаторов XML. Дополнительную информацию о программах expat можно найти на веб-сайте Кларка по адресу www.jclark.com/xml. Но если интерпретатор PHP откомпилирован вместе с библиотекой libxml2, то вы будете иметь возможность использовать весь свой код SAX для версии PHP4 и в версии PHP5 без каких-либо проблем.

К сожалению, термином синтаксический анализатор обозначают и программную библиотеку, такую как libxml2, и блок функций обработки XML в языке PHP. Но если речь идет о создании и вызове синтаксического анализатора, то подразумевается последняя, более конкретная трактовка. Последнее толкование подразумевается также в описаниях всех функций XML языка PHP, в которых используется термин синтаксический анализатор.

Применение API-интерфейса SAX

Способы использования API-интерфейса SAX зависят от поставленных целей, но чаще всего осуществляются описанные ниже действия:

  1. Определить, какого рода события подлежат обработке.
  2. Написать функции обработчиков для каждого из событий. При этом почти наверняка потребуется написать обработчик символьных данных, а также обработчики для начальных и конечных элементов.
  3. Создать синтаксический анализатор с использованием функции xml_parser_create(), а затем вызвать его с помощью функции xml_parse().
  4. Освободить память, занимаемую синтаксическим анализатором, с помощью функции xml_parser_free().

Ниже приведен простой пример применения всех основных функций XML (XML-файлом, используемым в данном примере, является файл test_dom.xml, который был создан выше):

Опции настройки конфигурации SAX

Среди опций настройки синтаксического анализатора XML, применяемого в сочетании с API-интерфейсом SAX, имеются две реконфигурируемые опции. Одна из них относится к приведению к единому регистру, а другая — к выбору целевой кодировки.

Опция приведения к единому регистру сохранилась как последствие ряда решений, принятых в прошлом, поэтому в наши дни, после того как язык XML окончательно объявлен чувствительным к регистру, может оказаться недействительной. Ранее версии языков SGML и HTML были нечувствительными к регистру, и поэтому для получения единообразных результатов, подлежащих сравнению, использовалась операция приведения к единому регистру (преобразования всех символов в верхний или нижний регистр во время синтаксического анализа).

Благодаря этому браузер приобретает способность, скажем, согласовывать дескриптор

с дескриптором . Но операция приведения к единому регистру оказалась неприемлемой из-за проблем, связанных с интернационализацией, поэтому после продолжительных дискуссий язык XML был объявлен как чувствительный к регистру. Если опция приведения к единому регистру разрешена, то все имена узлов, передаваемые обработчикам событий, преобразуются путем замены всех прописных букв строчными, поэтому, например, имя узла mynode поступает к обработчику событий в виде MYNODE. А если опция приведения к единому регистру запрещена, то открывающий дескриптор

не согласуется с закрывающим дескриптором

Использование опции приведения к единому регистру разрешено по умолчанию, что противоречит спецификации XML 1.0. Если применение этой опции не будет запрещено с помощью функции xml_parser_set_option(), то дескрипторы будут передаваться в обработчики событий после преобразования строчных букв в прописные.

Обработчики событий получают текстовые данные из синтаксического анализатора XML в одной из трех кодировок — ISO-8859-1, US-ASCII или UTF-8. По умолчанию применяется кодировка ISO-8859-1. Кодировка текста, передаваемого обработчикам событий, называется целевой кодировкой. По умолчанию целевая кодировка совпадает с кодировкой, используемой в исходном документе, которая называется исходной кодировкой. Если текст должен обрабатываться в кодировке, отличной от той, в которой он хранится, то можно изменить значение опции целевой кодировки.

Выборка значений опций кодировки и задание этих значений осуществляется с помощью функций xml_parser_get_option() и xml_parser_set_option(). Для управления операцией приведения к единому регистру используется константа XML_OPTION_CASE_FOLDING, а целевая кодировка задается с помощью константы XML_OPTlON_TARGET_ENCODING.

В следующем примере показано, как создать синтаксический анализатор XML, который считывает данные в коде ASCII, отменить опцию приведения к единому регистру и вывести результаты в кодировке UTF-8:

Функции API-интерфейса SAX

В таблице ниже приведен список наиболее важных функций SAX и описано их назначение:

Функции API-интерфейса SAX языка XML

Функция Назначение
xml_parser_create ([encoding]) Создает новый экземпляр синтаксического анализатора XML. В программе в любое время можно определить несколько разных синтаксических анализаторов. Возвращаемым значением является экземпляр синтаксического анализатора XML, в случае неудачного завершения функция возвращает значение false. Принимает один необязательный параметр — идентификатор кодировки символов (такой как UTF-8). Если кодировка не задана, по умолчанию применяется ISO-8859-1
xml_parse (parser, data, [final]) Вызывает на выполнение синтаксический анализатор XML. Ее параметрами являются синтаксический анализатор, созданный с использованием функции xml_parser_create(), строка, содержащая документ XML, и необязательный флажок завершения. Флажок завершения final позволяет указать, что текущий фрагмент данных представляет собой последний фрагмент, предназначенный для обработки этим синтаксическим анализатором
xml_get_error_code (parser) Если в процессе работы синтаксического анализатора возникает проблема, то выполняемый синтаксический анализ оканчивается неудачей. Вызов этой функции на выполнение позволяет определить код ошибки
xml_error_string (errorcode) После получения кода ошибки, возвращенного функцией xml_get_error_code(), возвращает строку, содержащую описание ошибки, которое может применяться для записи в лог
xml_set_element_handler (parser, start_element_handler, end_element_handler) Фактически устанавливает два обработчика, которые представляют собой просто функции. Первым из них является обработчик начального дескриптора элемента, имеющий доступ к имени элемента и к ассоциативному массиву атрибутов элемента, а вторым — обработчик конечного дескриптора элемента, который обеспечивает полный синтаксический анализ элемента
xml_set_character_data_handler (parser, cd_handler) Устанавливает функцию обработчика, которая вызывается каждый раз при обнаружении символьных данных. Функция обработчика принимает в качестве параметра строку, содержащую символьные данные
xml_parser_free (parser) Освобождает память, связанную с синтаксическим анализатором, который создан функцией xml_parser_create()
xml_set_default_handler (parser, handler) Устанавливает обработчик, применяемый по умолчанию. Если для некоторого события не указан ни один обработчик, то вызывается обработчик, применяемый по умолчанию, если он задан. Принимает в качестве параметра указатель на объект синтаксического анализатора и функцию-обработчик

API-интерфейс SimpleXML

API-интерфейс SimpleXML впервые появился в версии PHP 5 и рассматривается как средство отображения объектов. Указанный API-интерфейс не опирается на стандарты веб и направлен в основном на достижение простоты эксплуатации и сокращения потребности в памяти, пусть даже за счет определенной потери гибкости. Если требуется просто прочитать некоторые данные из документа XML и записать вместо них какие-то другие данные, то при решении этой задачи с помощью API-интерфейса SimpleXML потребуется наименьшее количество строк кода по сравнению со всеми другими возможными подходами.

В основе API-интерфейса SimpleXML лежит следующая идея: в программу передается сразу весь документ XML, после чего осуществляется синтаксический анализ документа и все результаты обработки документа сохраняются в памяти. Но документ хранится в памяти не в виде объекта DOM (с которым требуется выполнить дополнительные манипуляции, прежде чем использовать его содержимое), а в виде отдельных элементов, хранящихся в форме собственных переменных PHP, поэтому непосредственно доступных для применения. Безусловно, при решении многих задач, в которых используется API-интерфейс DOM, фактически не требуется проходить по всем дочерним и родительским узлам документа, а скорее необходимо применить одну и ту же операцию к группе вполне определенных узлов. Это означает, что SimpleXML в конечном итоге представляет собой характерный для языка PHP компромисс между подходами на основе SAX и DOM.

Использование API-интерфейса SimpleXML

При использовании API-интерфейса SimpleXML вначале с помощью функции simplexml_load_string() или simplexml_load_file() считывается представленный в какой-то форме (в виде строки или файла) код XML и присваивается переменной. Тем самым создается локальный объект, непосредственно доступный с помощью ссылки. В примере ниже показано, как можно применять API-интерфейс SimpleXML для получения значений переменных из файла XML с помощью всего лишь нескольких строк кода:

Функции API-интерфейса SimpleXML

В следующей таблице приведен список наиболее важных функций SimpleXML и указано их назначение:

Общие сведения о функциях SimpleXML

Что такое код xml_set_default_handler

(PHP 3>= 3.0.6, PHP 4)

xml_set_default_handler — настраивает обработчик по умолчанию.

Описание

bool xml_set_default_handler (resource parser, string handler)

Устанавливает функцию обработчика по умолчанию для XML-разборщика parser .
handler это строка с именем функции, которая обязана существовать в момент вызова xml_parse() для parser .

Функция, именованная в handler , обязана принимать два параметра: handler (resource parser, string data) parser

Это ссылка на XML-разборщик, вызывающий обработчик.

Второй параметр, data , содержит символьные данные. Это может быть XML-объявление, объявление типа документа, мнемоники или другие данные, для которых нет другого обработчика.

Если функция обработчика установлена как пустая строка, или FALSE , обработчик отключается/disabled.

TRUE возвращается, если обработчик настроен, а FALSE , если parser не является разборщиком.

Примечание: вместо имени функции может быть предоставлен также массив, содержащий ссылку на объект и имя метода.

Что такое код xml_set_default_handler

(PHP 3>= 3.0.6, PHP 4)

xml_set_default_handler — настраивает обработчик по умолчанию.

Описание

bool xml_set_default_handler (resource parser, string handler)

Устанавливает функцию обработчика по умолчанию для XML-разборщика parser .
handler это строка с именем функции, которая обязана существовать в момент вызова xml_parse() для parser .

Функция, именованная в handler , обязана принимать два параметра: handler (resource parser, string data) parser

Это ссылка на XML-разборщик, вызывающий обработчик.

Второй параметр, data , содержит символьные данные. Это может быть XML-объявление, объявление типа документа, мнемоники или другие данные, для которых нет другого обработчика.

Если функция обработчика установлена как пустая строка, или FALSE , обработчик отключается/disabled.

TRUE возвращается, если обработчик настроен, а FALSE , если parser не является разборщиком.

Примечание: вместо имени функции может быть предоставлен также массив, содержащий ссылку на объект и имя метода.

PHP XML Parser xml_set_default_handler расщепляет специальный символ

XML парсер PHP вызывает функцию обработчика по умолчанию в два раза, когда он встречает специальный символ в строке и, следовательно, разбивает строку. Я пытался решить ее, используя различные кодировки в заголовке XML, а также в коде PHP, но он по-прежнему разделяет строку:

Можно было бы ожидать:

Я не хотел бы быть линия расщепляется, поэтому любая идея, что решение?

xml_parser Действительно создают несколько событий здесь по причине я не понял , наконец , полностью, я думаю , что это из-за автоматическое определение кодировки.

Вы можете иметь дело с этим, создав свой собственный класс анализатора. Это, как правило, полезно в любом случае, не только в этом случае. Но в этом случае это особенно так, что вы можете собрать текст метки, которые получают распределенную по нескольким событиям.

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

Тогда каждый раз , когда label открывается тег, временный магазин сбрасывается. Когда появится текст, он добавил к этому временному хранению. Если label тег затем закрывается, вы можете передать этот текст в новое «событие» на этот раз функция , которую вы ищете с его текст:

xml_set_default_handler

(PHP 4, PHP 5, PHP 7)

xml_set_default_handler — Set up default handler

Description

Sets the default handler function for the XML parser parser .

Parameters

A reference to the XML parser to set up default handler function.

handler is a string containing the name of a function that must exist when xml_parse() is called for parser .

The function named by handler must accept two parameters:

If a handler function is set to an empty string, or FALSE , the handler in question is disabled.

Note: Instead of a function name, an array containing an object reference and a method name can also be supplied.

Return Values

Returns TRUE on success or FALSE on failure.

User Contributed Notes

I have the same issue using two installation of PHP5: on accepts to use the default handler while the other only uses the character_data one.

Maybe a configuration problem.

it seems to me that in PHP5 the function defined as default-handler (using xml_set_default_handler()) doesen’t get passed the cdata anymore:

i.e.:
xml_set_element_handler($this->parser, ‘parseSTART’, ‘parseEND’);
xml_set_default_handler($this->parser, ‘parseDEFAULT’);
function parseSTART() < . >
function parseEND() < . >
function parseDEFAULT()

under PHP5, parseDEFAULT will NOT get passed any cdata, but unter PHP4 it will. at least that’s my take on the strange stuff (not) happening after migrating to PHP5.

my solution was to add a xml_set_character_data_handler($parser, ‘parseDEFAULT’). it worked for me.

Что такое код xml_set_default_handler

(PHP 3>= 3.0.6, PHP 4 )

xml_set_default_handler — set up default handler

Description bool xml_set_default_handler ( resource parser, string handler)

Sets the default handler function for the XML parser parser . handler is a string containing the name of a function that must exist when xml_parse() is called for parser .

The function named by handler must accept two parameters: handler ( resource parser, string data)

The first parameter, parser , is a reference to the XML parser calling the handler.

The second parameter, data , contains the character data. This may be the XML declaration, document type declaration, entities or other data for which no other handler exists.

If a handler function is set to an empty string, or FALSE , the handler in question is disabled.

TRUE is returned if the handler is set up, FALSE if parser is not a parser.

Замечание: В качестве аргумента вместо имени функции может быть передан массив, содержащий ссылку на объект и имя метода.

xml_set_processing_instruction_handler

(PHP 4, PHP 5, PHP 7)

xml_set_processing_instruction_handler — Установка обработчика инструкций препроцессора (PI)

Описание

Задает обработчик инструкций препроцессора (PI) для XML-анализатора. parser .

Инструкции имеют следующий формат:

Список параметров

Ссылка на XML-анализатор, для которого устанавливается обработчик.

handler — строка содержащая имя функции, которая должна быть определена на момент вызова функции xml_parse() из анализатора parser .

Функция с именем handler должна принимать три аргумента:

Если в качестве обработчика передана пустая строка или FALSE , этот обработчик отключается.

Замечание: В качестве аргумента вместо имени функции может быть передан массив, содержащий ссылку на объект и имя метода.

Возвращаемые значения

Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.

Илон Маск рекомендует:  Что такое код dbmclose
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL