2013-02-27 140 views
0

我一直在尝试几个小时,但我无法让包含工作。我留下的只是一个空白页面。采取甘德在代码:xsl:包括不工作

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

更新:这显然不是到任何地方。就我的研究而言,使用PHP时不能导入多个xsl样式表。另一方面,有谁知道这是否可以使用ColdFusion?

回答

0

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

试过了,它所做的只是单独加载第二个样式表。第一个被忽略。 – Zizo47 2013-02-27 15:21:43

+0

另外,当我尝试将第一个和第二个样式表分配给不同的变量时,我又获得了空白页面。该页面上的评论实际上表示不支持多个样式表加载。 – Zizo47 2013-02-27 15:24:07

2

的xsl:包括必须是XSL的直接子:样式表。

如果您的XSLT处理器没有为您提供错误消息,那么您需要更好的XSLT处理器。