XSLTProcessor::importStylesheet

(PHP 5, PHP 7, PHP 8)

XSLTProcessor::importStylesheet导入样式表

说明

public XSLTProcessor::importStylesheet(object $stylesheet): bool

此方法将样式表导入到 XSLTProcessor 中以进行转换。

参数

stylesheet

作为 DOMDocumentSimpleXMLElement 对象的导入样式表。

返回值

成功时返回 true,失败时返回 false

添加备注

用户贡献的备注 5 则备注

kevin at metalaxe dot com
16 年前
仅供参考,截至目前,此函数不支持导入多个样式表。以下将仅输出第二个导入表的样式表转换

<?php

# 加载 XML 文件
$XML = new DOMDocument();
$XML->load( 'data.xml' );

# 开始 XSLT
$xslt = new XSLTProcessor();

# 导入样式表 1
$XSL = new DOMDocument();
$XSL->load( 'template1.xsl' );
$xslt->importStylesheet( $XSL );

# 导入样式表 2
$XSL = new DOMDocument();
$XSL->load( 'template2.xsl' );
$xslt->importStylesheet( $XSL );

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

这没有记录,而且相当令人失望。
bbrosseau at gmail
19 年前
对于想要使用外部文档的人来说,重要的是不要使用 DomDocument::loadXML,因为处理器将没有路径来查找其他文件

因此,如果您想使用预先生成的样式表 $f 转换一些 xml

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

document('other.xml') 将不适用于相对路径,而 <?php $xsl = DomDocument::load($f); ?> 将可以!
diesel at spbnet dot ru
17 年前
这不是问题。您可以设置 DOMDocument 的 documentURI 属性。
类似这样

<?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);
?>

那么 document('other.xsl') 将可以正常工作!
fcartegnie
17 年前
PHP5 xsl 处理器在处理 CDATA 部分时与 PHP4 的行为不同。(请参阅 http://bugs.php.net/bug.php?id=29837
加载的 XSL 表 CDATA 部分默认情况下不允许输出转义处理(CDATA 中的所有内容默认情况下都会被转义)。

因此在这种情况下,您不能以通常的方式构建 XSL Dom
$xsldom = DomDocument::loadXML(file_get_contents('sheet.xsl'));

并且必须通过以下方式进行(允许 LIBXML_NOCDATA 参数)
$xsldom = new DomDocument;
$xsldom->load('sheet.xsl', LIBXML_NOCDATA);

然后 CDATA 的输出转义行为将是正确的。
rbmeo at yahoo dot com
12 年前
要使您的导入动态化,请尝试以下代码

<?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());
?>

这段代码基本上加载了主样式表,在前面添加了导入的 xsl 代码,然后重新加载为 xml 字符串,这样导入的样式表将在 dom 中加载。
To Top