xsltProcessor === null ) { $stylesheet = new DOMDocument(); $stylesheet->load( $this->options->xslt ); $this->xsltProcessor = new XSLTProcessor(); $this->xsltProcessor->importStyleSheet( $stylesheet ); } // Set provided parameters. foreach ( $this->options->parameters as $namespace => $parameters ) { foreach ( $parameters as $option => $value ) { $this->xsltProcessor->setParameter( $namespace, $option, $value ); } } // We want to handle the occured errors ourselves. $oldErrorHandling = libxml_use_internal_errors( true ); // Transform input document $dom = $this->xsltProcessor->transformToDoc( $doc->getDomDocument() ); $errors = ( $this->options->failOnError ? libxml_get_errors() : null ); libxml_clear_errors(); libxml_use_internal_errors( $oldErrorHandling ); // If there are errors and the error handling is activated throw an // exception with the occured errors. if ( $errors ) { throw new ezcDocumentErroneousXmlException( $errors ); } // Reset parameters, so they are not automatically applied to the next // traansformation. foreach ( $this->options->parameters as $namespace => $parameters ) { foreach ( $parameters as $option => $value ) { $this->xsltProcessor->removeParameter( $namespace, $option ); } } // Build document from transformation and return that. return $this->buildDocument( $dom ); } /** * Build document * * Build document of appropriate type from the DOMDocument, created by the * XSLT transformation. * * @param DOMDocument $document * @return ezcDocumentXmlBase */ abstract protected function buildDocument( DOMDocument $document ); } ?>