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

Sam*_* Li 3 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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

如何将我的head.xsl文件包含进去home.xsl

Jea*_*ard 5

您可以使用包含其他文件 <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>
Run Code Online (Sandbox Code Playgroud)

更多细节

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

不要混淆xsl:includexsl:import,这是除了在导入的样式表的指示可以由指令在导入样式表覆盖,在任何包含的样式表相似.换句话说,导入样式表中元素的导入优先级始终小于导入样式表的导入优先级.

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

这里贴了一个贴 w3 documentation

多次包含样式表可能会因重复定义而导致错误.当它们是间接的时,这种多重夹杂物不那么明显.例如,如果样式表B包括样式表A,样式表C包括样式表A,样式表D包括样式表B和样式表C,那么A将由D间接包含两次.如果所有的B,C和D都用作独立的样式表,那么可以通过将除了包含A的所有内容分离到单独的样式表B'中并且将B更改为仅包含B'和A的包含来避免错误,类似地对于C,然后将D改变为包括A,B',C'.

请注意,两个元素xsl:includexsl:import元素仅允许作为顶级元素.