123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- <?php
- /** @file
- * Provide QueryPath with XSLT support using the PHP libxslt module.
- *
- * This is called 'QPXSL' instead of 'QPXSLT' in accordance with the name
- * of the PHP extension that provides libxslt support.
- *
- * You must have PHP XSL support for this to function.
- *
- * @author M Butcher <matt@aleph-null.tv>
- * @license http://opensource.org/licenses/lgpl-2.1.php LGPL or MIT-like license.
- * @see QueryPathExtension
- * @see QueryPathExtensionRegistry::extend()
- * @see QPXSL
- * @see QPXML
- */
-
- /**
- * Provide tools for running XSL Transformation (XSLT) on a document.
- *
- * This extension provides the {@link QPXSL::xslt()} function, which transforms
- * a source XML document into another XML document according to the rules in
- * an XSLT document.
- *
- * This QueryPath extension can be used as follows:
- * <code>
- * <?php
- * require 'QueryPath/QueryPath.php';
- * require 'QueryPath/Extension/QPXSL.php';
- *
- * qp('src.xml')->xslt('stylesheet.xml')->writeXML();
- * ?>
- *
- * This will transform src.xml according to the XSLT rules in
- * stylesheet.xml. The results are returned as a QueryPath object, which
- * is written to XML using {@link QueryPath::writeXML()}.
- * </code>
- *
- * @ingroup querypath_extensions
- */
- class QPXSL implements QueryPathExtension {
-
- protected $src = NULL;
-
- public function __construct(QueryPath $qp) {
- $this->src = $qp;
- }
-
- /**
- * Given an XSLT stylesheet, run a transformation.
- *
- * This will attempt to read the provided stylesheet and then
- * execute it on the current source document.
- *
- * @param mixed $style
- * This takes a QueryPath object or <em>any</em> of the types that the
- * {@link qp()} function can take.
- * @return QueryPath
- * A QueryPath object wrapping the transformed document. Note that this is a
- * <i>different</em> document than the original. As such, it has no history.
- * You cannot call {@link QueryPath::end()} to undo a transformation. (However,
- * the original source document will remain unchanged.)
- */
- public function xslt($style) {
- if (!($style instanceof QueryPath)) {
- $style = qp($style);
- }
- $sourceDoc = $this->src->top()->get(0)->ownerDocument;
- $styleDoc = $style->get(0)->ownerDocument;
- $processor = new XSLTProcessor();
- $processor->importStylesheet($styleDoc);
- return qp($processor->transformToDoc($sourceDoc));
- }
- }
- QueryPathExtensionRegistry::extend('QPXSL');
|