我已经尝试了几个小时了,但我就是不能让这个包含工作。我只剩下一张白纸。看一下代码:
something.xsl
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" omit-xml-declaration="yes" />
<xsl:output
doctype-public="-//WAPFORUM//DTD XHTML Mobile 1.0//EN"
doctype-system="http://www.wapforum.org/DTD/xhtml-mobile10.dtd"/>
<xsl:template match="/">
<xsl:element name="html">
<xsl:element name="head">
<xsl:element name="title">Something</xsl:element>
</xsl:element>
<xsl:element name="body">
<xsl:attribute name="onload">
<xsl:text>initialize();</xsl:text>
</xsl:attribute>
<xsl:element name="div">
<xsl:attribute name="id">
<xsl:text>main</xsl:text>
</xsl:attribute>
</xsl:element>
<xsl:include href="blob.xsl" />
</xsl:element>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
blob.xsl
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" omit-xml-declaration="yes" />
<xsl:output
doctype-public="-//WAPFORUM//DTD XHTML Mobile 1.0//EN"
doctype-system="http://www.wapforum.org/DTD/xhtml-mobile10.dtd"/>
<xsl:template match="*">
<xsl:element name="div">
<xsl:attribute name="id">
<xsl:text>navoptions</xsl:text>
</xsl:attribute>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
和PHP代码
<?php
$xml = new DOMDocument();
$xml->load('file.xml');
$xsl = new DOMDocument;
$xsl->load('something.xsl');
$proc = new XSLTProcessor();
$proc->importStyleSheet($xsl);
echo $proc->transformToXML($xml);
?>
Update:这显然没有任何进展。就我的研究而言,在使用PHP时不能导入多个xsl样式表。另一方面,有人知道使用ColdFusion是否可以实现这一点吗?
xsl:include必须是xsl:stylesheet的直接子元素。
如果你的XSLT处理器没有给你一个错误消息,那么你需要一个更好的XSLT处理器。
除了Michael Kay所说的,当我使用php并包含/导入xslt时,您可以通过为该元素设置xml:base属性来帮助它解析uri。
。如果xslt在/var/www/html/views/中,则xsl:include看起来像:
& lt; xsl:包括href ="blob.xsl"xml: base ="/var/www/html/视图/";/在
见:https://www.w3.org/TR/xslt-30/uri引用
XSLTProcessor可能不知道如何解析该行。您必须手动包含它,或者提示XSLTProcessor。
http://php.net/manual/en/xsltprocessor.importstylesheet.php应该工作的注释代码:
<?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 );
?>