Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы на вопросы по МИРу.doc
Скачиваний:
3
Добавлен:
28.04.2019
Размер:
572.42 Кб
Скачать

22. Свойства и методы элементов документа.

23. Типы атрибутов xml документа.

Атрибуты в XML бывают трех типов: строковые, именные (tokenized) и списочные.

  • Строковые атрибуты могут принимать любые текстовые значения и обозначаются ключевым словом CDATA.

  • На именные типы наложены определенные лексические и семантические ограничения. Эти типы задаются следующими ключевыми словами:

    • ID — уникальный идентификатор элемента. Элемент может иметь не более одного атрибута этого типа; параметры для него должны иметь значение #IMPLIED или #REQUIRED.

    • IDREF — значение атрибута типа ID другого элемента.

    • IDREFS — список значений типа IDREF, разделенных пробелами.

    • ENTITY — имя неанализируемого раздела, объявленного в DTD.

    • ENTITIES — список значений типа ENTITY, разделенных пробелами.

    • NMTOKEN — любое имя.

    • NMTOKENS — список значений типа NMTOKEN, разделенных пробелами.

  • Списочные атрибуты могут принимать значения только из заданного списка. Они подразделяются на:

    • Перечисление: список имен, разделенных пробелами, заключенный в круглые скобки; возможно задание вариантов с помощью разделителя вертикальная черта (|).

    • Список нотаций: ключевое слово NOTATION, за которым следует перечисление имен нотаций. Элемент может иметь не более одного атрибута этого типа; значениями атрибута могут быть только имена нотаций, объявленных в DTD.

24. Функции обработки кода XML

xml_parser_create( )

Перед обработкой документа XML необходимо предварительно создать анализатор. Синтаксис:

int xml_parser_create([stnng кодировка])

Необязательный параметр определяет кодировку исходного текста. В настоящее время поддерживаются три варианта кодировки:

  • UTF-8;

  • US-ASCII;

  • ISO-8859-1 (используется по умолчанию).

По аналогии с тем, как функция fopen( ) возвращает манипулятор открытого файла, функция xml_parser_create( ) также возвращает манипулятор, используемый для вызова различных функций в процессе обработки XML. При одновременной обработке нескольких документов можно создать сразу несколько анализаторов.

xml_parse()

Функция xml_parse( ) выполняет обработку документа XML. Синтаксис:

int xml_parse(int анализатор, string данные [int завершение])

Первый параметр определяет анализатор XML (используется значение, возвращаемое при вызове xml_parser_create( )). Если необязательный параметр завершение равен TRUE, передаваемый фрагмент данных является последним. Как правило, это происходит при достижении конца обрабатываемого файла.

xml_parser_free( )

Функция освобождает ресурсы, выделенные для работы анализатора. Синтаксис:

int xml_parser_free(int анализатор)

Параметр функции определяет анализатор XML.

Другие полезные функции

В РНР также существуют другие функции, упрощающие процесс обработки кода XML.

utf8_decode( )

Функция преобразует данные в кодировку ISO-8859-1. Предполагается, что преобразуемые данные находятся в кодировке UTF-8. Синтаксис:

string utf8_decode(string данные)

Параметр данные содержит преобразуемые данные в кодировке UTF-8.

utf8_encode( )

Функция преобразует данные из кодировки ISO-8859-1 в кодировку UTF-8. Синтаксис:

string utf8_decode(string данные)

Параметр данные содержит преобразуемые данные в кодировке ISO-8859-1.

xml_get_error_code( )

Функция xm1_get_error_code( ) получает код ошибки, возникшей в процессе обработки XML. Код ошибки передается функции xml_error_string( ) (см. ниже) для интерпретации. Синтаксис:

int xml_error_code(int анализатор)

Параметр функции определяет анализатор XML. Пример использования приведен ниже, в описании функции xml_get_current_line_number( ).

xml_error_string( )

Ошибкам, возникающим в процессе анализа кода XML, присваиваются числовые коды. Функция xml_error_string( ) возвращает текстовое описание ошибки по ее коду. Синтаксис:

string xml_error_string(int код)

В параметре функции передается код ошибки (вероятно, полученный при вызове функции xml_get_error_code( )). Пример использования функции приведен ниже, в описании функции xml_get_current_line_number( ).

xml_get_current_line_number( )

Функция возвращает номер текущей строки, обрабатываемой анализатором XML. Синтаксис:

int xml_get_current_line_number(int анализатор)

Параметр функции определяет анализатор XML. Пример использования функции:

while ($line - fread($fh. 4096)) :

if (! xml_parse($xml_parser. $line. feof($fh)));

$err_string - xml_error_string(xml_get_error_code($xml_parser)); 

$line_number - xml_get_current_line_number($xml_parser); 

print "Error! [Line Sline_number]: $err_string";

endif; 

endwhile;

Например, если ошибка была обнаружена в шестой строке файла, определяемого манипулятором $fh, сообщение будет выглядеть примерно так:

Error! [Line 6]:mi snatched tag

xml_get_current_column_number( )

Функция xml_get_current_colunin_number( ) может использоваться в сочетании с xml_get_current_line_number( ) для определения точного местонахождения ошибки в документе XML. Синтаксис:

int xml_get_current_column_number(int анализатор)

Параметр функции определяет анализатор XML. Давайте усовершенствуем предыдущий пример:

while ($line = fread($fh. 4096)) :

if (! xml_parse($xml_parser, $line, feof($fh))):

$err_string = xml_error_string(xml_get_error_code($xml_parser)); 

$line_number = xml_get_current_line_number($xml_parser); 

$column_number = xml_get_current_column_number($xml_parser) 

print "Error! [Line $line_nuimber, Column $column_number]: $err_string"; 

endif; 

endwhile;

Например, если ошибка была обнаружена в шестой строке файла, определяемого манипулятором $fh, сообщение будет выглядеть примерно так:

Error! [Line 6 Column 2]:mismatched tag