xslt - XSLT 中的主样式表共享

标签 xslt

我想在 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>

我可以改进这个解决方案吗?
  • 我不能从主样式表开始,因为我需要 xsl:import 一切。
  • 我不希望 master.xslt 在每个特定页面上包含引用。

  • 另一个决定(违背 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/

    相关文章:

    xml - 使用 XSLT 合并多个 XML 文件并执行一些数学函数

    xml - 使用 xslt :analyze-string to add acronyms to HTML

    xslt - 使用 XSLT 进行空前缀转换的 XML

    xslt - XSL(T) 和 XPath 前同级不起作用

    xml - 选择有条件的节点

    xml - 非常简单的 XSL/XPath 健全性检查

    xml - 如何解决此错误 "The element type "head"must be terminated > by the matching end-tag "</head>"?

    database - 树状数据结构的转换语言

    xml - XSLT 1.0 : Conditional For-Each

    java - <msxsl :script> element with Java or JS 的用法