This is an "unstable" release. All the unit tests are passing, but there could be other bugs. But there are some exciting improvements, so if you can test I'd appreciate it.
Here's what's new:
* PERFORMANCE: I have completely rewritten the traversal algorithms, and the new version is much faster, and much lighter on resources. It also now matches jQuery's treatment of certain pseudo-classes.
* SPR-0, Autoloaders, and a new OOP Interface: qp() and htmlqp() are still there, but new OOP factory functions have been added: QueryPath::with() [works like qp()] and QueryPath::withHTML() [works like htmlqp()]. With this addition, SPR-0 is now supported.
* Composer support: Use Composer (http://getcomposer.org
) to manage QueryPath. It is now trivially easy to use QueryPath with Symfony and other Composer-aware frameworks.
* Extensions: The extension mechanism has been altered quite a bit. If you use QueryPath extensions, you now need to use QueryPath::extend() to register the extension. Not a huge deal, but different. By refactoring, though, we gain new flexibility.
That's QueryPath 3 in a nutshell. I'm actively reworking documentation, and also toying around with allowing QueryPath to traverse JSON documents as well as HTML and XML.
HTML5: The Big Unknown
The one outstanding issue I have -- and it's not a blocker for QP3 -- is what should be done about PHP and HTML5. There has been very little work (read: none) to bring HTML5 support into libxml, the library that supports XML and HTML processing. I am actively looking for an alternative, and am considering writing a fully featured HTML 5 parser. If you have suggestions about existing *complete* implementations, please let me know.