XSLTProcessor::importStylesheet
(PHP 5, PHP 7, PHP 8)
XSLTProcessor::importStylesheet — Import stylesheet
说明
public
XSLTProcessor::importStylesheet(object
$stylesheet
): boolThis method imports the stylesheet into the XSLTProcessor for transformations.
返回值
成功时返回 true
, 或者在失败时返回 false
。

User Contributed Notes 5 notes
kevin at metalaxe dot com ¶
14 years ago
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.
bbrosseau at gmail ¶
17 years ago
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!
diesel at spbnet dot ru ¶
15 years ago
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!
fcartegnie ¶
14 years ago
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.
rbmeo at yahoo dot com ¶
9 years ago
To make your import dynamic, try this code:
<?php
$dom = new DOMDocument();
$dom->load('main.xsl');
$xpath = new DomXPath($dom);
$importnode= $questionsXsl->createElement('xsl:include');
$attr= $questionsXsl->createAttribute('href');
$attr->value = 'import.xsl';
$importnode->appendChild($attr);
$dom->documentElement->insertBefore($importnode,$ref);
$dom->loadXml($dom->saveXml());
?>
this code basically loads the main stylesheet, prepend the import xsl code then reload as xml string so the imported stylesheet will be loaded at dom.
备份地址:http://www.lvesu.com/blog/php/xsltprocessor.importstylesheet.php