如何将XSL文件包含到另一个文件中?

时间:2015-03-05 21:44:44

标签: xslt xslt-2.0

我使用XSLT 2.0版,我希望在另一个文件head.xsl中包含一个头模板home.xsl

home.xsl:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <xsl:output method="html" indent="yes"/>
    <xsl:template match="/">
        <html>
            <head>
                <link rel="stylesheet" type="text/css" href="style.css"/>
                <title/>
            </head>
            <body>
                <div id="main">
                    <div id="content">
                        <xsl:call-template name="home-in"/>
                    </div>
                </div>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>

head.xsl:

xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <xsl:output method="html" indent="yes"/>
    <xsl:template match="/">
        <html>
            <head>
                <link rel="stylesheet" type="text/css" href="style.css"/>
                <title/>
            </head>
            <body>
                <div id="container">
                    <div id="header">
                        <div id="menu">
                            <ul>
                                <li><a href="#" class="active">Home</a></li>
                                <li><a href="#">about</a></li>
                            </ul>
                        </div>
                    </div>
                </div>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>

如何将head.xsl文件包含到home.xsl

1 个答案:

答案 0 :(得分:6)

您可以使用<xsl:include>

添加其他文件

您的home.xsl文件看起来像这样

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <xsl:output method="html" indent="yes"/>
    <xsl:include href="head.xsl"/>
    <xsl:template match="/">
        <html>
            <head>
                <link rel="stylesheet" type="text/css" href="style.css"/>
                <title/>
            </head>
            <body>
                <div id="main">
                    <div id="content">
                        <xsl:call-template name="home-in"/>
                    </div>
                </div>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>

更多详情

XSLT处理器将简单地将指令替换为href属性中指定的样式表的内容。请注意,包含的样式表模板将具有与包含样式表相同的默认优先级和导入优先级。

请勿将xsl:includexsl:import混淆,除了导入样式表中的说明可以被导入样式表和任何包含的样式表中的指令覆盖之外,它们是相似的。换句话说,导入样式表中元素的导入优先级始终小于导入样式表的导入优先级。

由于使用xsl:include与复制文件中的代码相同,因此请确保在使用命名模板时没有重复的模板名称。

这是来自w3 documentation

的粘贴
  

多次包含样式表可能会导致错误   重复定义。这种多重夹杂物不太明显   他们是间接的。例如,如果样式表B包含样式表A,   样式表C包括样式表A,样式表D包括两者   样式表B和样式表C,然后A将由D间接包含   两次。如果所有的B,C和D都用作独立的样式表,那么   通过将除B中的所有内容分开来避免错误   将A包含在单独的样式表B'中并将B更改为包含   只是包含B'和A,类似于C,然后将D改为   包括A,B',C'。

请注意,xsl:includexsl:import元素都只允许作为顶级元素。