我使用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
?
答案 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:include
与xsl: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:include
和xsl:import
元素都只允许作为顶级元素。