0

私は今何時間も試していますが、インクルードを機能させることができません。残っているのは空白のページだけです。コードをざっと見てください:

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を使用してこれが可能かどうかを誰かが知っていますか?

4

3 に答える 3

2

xsl:include は xsl:stylesheet の直接の子でなければなりません。

XSLT プロセッサがこのエラー メッセージを表示しない場合は、より優れた XSLT プロセッサが必要です。

于 2013-02-27T16:52:09.820 に答える
1

Michael Kay の言うことに加えて、php を使用して xslt をインクルード/インポートすると、その要素に xml:base 属性を設定することで uri を解決するのに役立ちます。

つまり、xslt が /var/www/html/views/ にある場合、xsl:include は次のようになります。

<xsl:include href="blob.xsl" xml:base="/var/www/html/views/" />

参照: https://www.w3.org/TR/xslt-30/#uri-references

于 2021-02-17T15:59:42.330 に答える
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 ); 
?> 
于 2013-02-27T15:15:16.247 に答える