Через Кристиана похоже, что в 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 выглядит как мечта…