Статьи

XMLReader выходит на PHP5 / PECL

Через Кристиана похоже, что в PHP5 будет реализована быстрая реализация XML Pull , основанная на libxml2 (библиотека XML, стоящая за PHP5).

В конце концов это должно быть опубликовано через PECL (и я думаю, что в ближайшем будущем это будет не то, что вы можете ожидать от вашего общего хоста), но прямо сейчас источник находится на сайте http://cvs.php.net/cvs.php/ pecl / xmlreader / .

По сути, это означает (возможно) более простой способ анализа XML, чем в SAX. Статья Филиппа « Назад к основам: XML в .NET» показывает, как работает XMLReader .NET, и его PHP будет почти таким же.

Основываясь на взгляде на исходный код PHP xmlreader, его использование будет примерно таким;

// Create the parser $reader = new XMLReader(); // Load some XML in a string $reader->XML($xml); // Loop through the contents while ($reader->read()) { switch ( $reader->nodeType ) { // Tag start case XMLREADER_ELEMENT: echo 'Got opening tag for '.reader->name; break; // Tag start case XMLREADER_END_ELEMENT: echo 'Got closing tag for '.reader->name; break; } }

// Create the parser $reader = new XMLReader(); // Load some XML in a string $reader->XML($xml); // Loop through the contents while ($reader->read()) { switch ( $reader->nodeType ) { // Tag start case XMLREADER_ELEMENT: echo 'Got opening tag for '.reader->name; break; // Tag start case XMLREADER_END_ELEMENT: echo 'Got closing tag for '.reader->name; break; } }

// Create the parser $reader = new XMLReader(); // Load some XML in a string $reader->XML($xml); // Loop through the contents while ($reader->read()) { switch ( $reader->nodeType ) { // Tag start case XMLREADER_ELEMENT: echo 'Got opening tag for '.reader->name; break; // Tag start case XMLREADER_END_ELEMENT: echo 'Got closing tag for '.reader->name; break; } }

// Create the parser $reader = new XMLReader(); // Load some XML in a string $reader->XML($xml); // Loop through the contents while ($reader->read()) { switch ( $reader->nodeType ) { // Tag start case XMLREADER_ELEMENT: echo 'Got opening tag for '.reader->name; break; // Tag start case XMLREADER_END_ELEMENT: echo 'Got closing tag for '.reader->name; break; } }

// Create the parser $reader = new XMLReader(); // Load some XML in a string $reader->XML($xml); // Loop through the contents while ($reader->read()) { switch ( $reader->nodeType ) { // Tag start case XMLREADER_ELEMENT: echo 'Got opening tag for '.reader->name; break; // Tag start case XMLREADER_END_ELEMENT: echo 'Got closing tag for '.reader->name; break; } }

Другими словами, вместо обратных вызовов SAX вы можете обрабатывать весь документ в одном цикле — отлично подходит для взлома!

Также интересно, что согласно оригинальным примерам C на xmlreader , он имеет возможность проверять XML на соответствие DTD или схеме Relax NG. Сейчас я считаю, что последние расширения DOM могут проверять весь XML-документ и дают вам «да / нет», но это, похоже, позволит вам проверить отдельные узлы в документе.

Согласно «Обзору API-интерфейсов и методов обработки XML» , существует 5 основных методов анализа XML. Вот как это будет выглядеть с PHP5

— Нажмите: расширение SAX

— Потяните: это новое расширение xmlreader

— Дерево: расширение DOM

— Отображение объектов: простой XML

— Курсор: пока ничего не верю

Все они построены на libxml2 в PHP5. Согласно бенчмаркам, таким как http://xmlbench.sourceforge.net/ , libxml2 является более или менее быстрым парсером XML.

По сравнению с состоянием XML в PHP4, когда разработчики сделали удивительные вещи с SAX , PHP5 выглядит как мечта…