PHP Doku:: Importiert ein Stylesheet - xsltprocessor.importstylesheet.html

Verlauf / Chronik / History: (8) anzeigen

Sie sind hier:
Doku-StartseitePHP-HandbuchFunktionsreferenzXML-ManipulationXSLDie XSLTProcessor-KlasseXSLTProcessor::importStylesheet

Ein Service von Reinhard Neidl - Webprogrammierung.

Die XSLTProcessor-Klasse

<<XSLTProcessor::hasExsltSupport

XSLTProcessor::registerPHPFunctions>>

XSLTProcessor::importStylesheet

(PHP 5)

XSLTProcessor::importStylesheetImportiert ein Stylesheet

Beschreibung

void XSLTProcessor::importStylesheet ( object $stylesheet )

Diese Methode importiert ein Stylesheet in das XSLTProcessor-Objekt zur Transformierung.

Parameter-Liste

stylesheet

Das zu importierende Stylesheet in Form eines DOMDocument- oder SimpleXMLElement-Objekts.

Rückgabewerte

Es wird kein Wert zurückgegeben.

Changelog

Version Beschreibung
5.2.8 Erlaubt wieder die Übergabe von SimpleXMLElement (Defekt ab PHP 5.2.6)


4 BenutzerBeiträge:
- Beiträge aktualisieren...
kevin at metalaxe dot com
18.11.2007 0:26
Just for reference, as of this writing, this function does not support importing multiple stylesheets. The following will output only the stylesheet transformation of the second imported sheet:

<?php

# LOAD XML FILE
$XML = new DOMDocument();
$XML->load( 'data.xml' );

# START XSLT
$xslt = new XSLTProcessor();

# IMPORT STYLESHEET 1
$XSL = new DOMDocument();
$XSL->load( 'template1.xsl' );
$xslt->importStylesheet( $XSL );

#IMPORT STYLESHEET 2
$XSL = new DOMDocument();
$XSL->load( 'template2.xsl' );
$xslt->importStylesheet( $XSL );

#PRINT
print $xslt->transformToXML( $XML );
?>

This wasn't documented and quite dissapointing.
fcartegnie
21.07.2007 15:11
PHP5 xsl processor has a different behaviour than PHP4's one with CDATA sections. (see http://bugs.php.net/bug.php?id=29837)
Loaded XSL sheet CDATA sections does not allow, by default, output-escaping handling (everything in the CDATA is escaped by default).

So in this case you can't build your XSL Dom the usual way:
    $xsldom = DomDocument::loadXML(file_get_contents('sheet.xsl'));

and must go through this one (allowing LIBXML_NOCDATA parameter):
    $xsldom = new DomDocument;
    $xsldom->load('sheet.xsl', LIBXML_NOCDATA);

Then the CDATA output-escaping behaviour will be correct.
diesel at spbnet dot ru
19.03.2007 18:07
This is not a problem. You may set DOMDocument's documentURI property.
Something like this

<?php
$xsl
= new DOMDocument('1.0','UTF-8');
    
$xsl->loadXML(file_get_contents('/foo/bar/somefile.xsl');
$xsl->documentURI = '/foo/bar/somefile.xsl';

$xslProc = new XSLTProcessor();
$xslProc->importStylesheet($xsl);
?>

and document('other.xsl') will work fine!
bbrosseau at gmail
2.03.2005 5:46
For those who wants to use external documents, it is important not to use the DomDocument::loadXML because the processor will not have the path to look for other files
 
So if you want to transform some xml with a pre-generated stylesheet $f:

<?php
$f
= 'somestylesheet.xsl';
$xsl = DomDocument::loadXML(file_get_contents($f));
?>

document('other.xml') will not work with relative path and <?php $xsl = DomDocument::load($f); ?> will!



PHP Powered Diese Seite bei php.net
The PHP manual text and comments are covered by the Creative Commons Attribution 3.0 License © the PHP Documentation Group - Impressum - mail("TO:Reinhard Neidl",...)