我想在 XSLT 中创建一个主模板,它可以存储在一个单独的文件中。其他所有页面样式表都使用 xsl:import 共享它。
主文件.xslt
<xsl:template match="Page">
<html>
<head>
</head>
<body>
<call-template name="Content"/>
</body>
</html>
</xsl:template>
<xsl:stylesheet>
页面.xslt
<xsl:stylesheet>
<xsl:import href="master.xslt"/>
<xsl:template match="/">
<apply-templates match="Page"/>
</xsl:template>
<xsl:template name="Content">
... apply something page-specific
</xsl:template>
</xsl:stylesheet>
页面.xml
<Page>
... something page-specific
</Page>
我可以改进这个解决方案吗?
另一个决定(违背 xslt 精神)可能是这样的:
主文件.xslt
<xsl:template name="masterHead">
<html>
<head>
</head>
<body>
</xsl:template>
<xsl:template name=masterEnd>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
页面.xslt
<xsl:stylesheet>
<xsl:import href="master.xslt"/>
<xsl:template match="/">
<call-template name=masterHead>
... apply something page-specific
<call-template name=masterEnd/>
</xsl:template>
</xsl:stylesheet>
我们不需要任何通用 root
<Page>
元素。
最佳答案
使用 <xsl:import>
是正确的设计决策 .这正是此 XSLT 指令旨在用于的主要用例。
可以走得更远 -- 查找 <xsl:apply-imports>
指令,以及导入的样式表如何应用模板,其 Action 和含义完全不知道。后者被称为Higher-Order-Functions并在 XSLT 中使用 FXSL library 实现(完全用 XSLT 编写)。
关于xslt - XSLT 中的主样式表共享,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/646878/