Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns XSLT样式表设计模式-在不同的样式表中分离通用模板和特定模板_Design Patterns_Xslt_Fxsl - Fatal编程技术网

Design patterns XSLT样式表设计模式-在不同的样式表中分离通用模板和特定模板

Design patterns XSLT样式表设计模式-在不同的样式表中分离通用模板和特定模板,design-patterns,xslt,fxsl,Design Patterns,Xslt,Fxsl,我想知道在XSLT样式表设计模式中是否有一种很好的方法来分离公共数据表示和特定数据表示 我试过了,但很困惑,迷路了。如果您能提供任何建议、技巧和提示,让我了解如何更好地分离XSLT样式表,我将不胜感激。另外,我非常感谢您对下面的示例的帮助,因为它不起作用=/谢谢 我需要创建各种具有不同外观的HTML文档,以重用一些数据。例如,文档的日期、签名详细信息(姓名、职务)等。另外,我使用了很多全局变量(因为XML的结构不好,数据在整个文档中重复使用) 我想做的是,移动所有在一个样式表中创建通用HTML结

我想知道在XSLT样式表设计模式中是否有一种很好的方法来分离公共数据表示和特定数据表示

我试过了,但很困惑,迷路了。如果您能提供任何建议、技巧和提示,让我了解如何更好地分离XSLT样式表,我将不胜感激。另外,我非常感谢您对下面的示例的帮助,因为它不起作用=/谢谢

我需要创建各种具有不同外观的HTML文档,以重用一些数据。例如,文档的日期、签名详细信息(姓名、职务)等。另外,我使用了很多全局变量(因为XML的结构不好,数据在整个文档中重复使用)

我想做的是,移动所有在一个样式表中创建通用HTML结构的模板,然后所有特定的位都在它们自己的样式表中

如下所示:

公共模板样式表“commonTemplates.xsl”


...

特定模板样式表:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<!-- Imports -->
<xsl:import href="commonTemplates.xsl"/>

<!-- BODY CONTENT OF HTML PAGE -->
<xsl:template match="/Bookings/Booking">
    <xsl:call-template name="docDate"/>
    <!-- document's content -->
    <div>
        <xsl:call-template name="content" />
    </div>
</xsl:template>


<xsl:template name="docTitle">
    <xsl:text>Here is the document title</xsl:text>
</xsl:template>

<!-- some content at the end of which signature should be inserted -->
<xsl:template name="content">
    <p>SOME CONTENT</p>        
    <xsl:apply-templates />
</xsl:template>

<!-- specific rule to insert appropriate data for signature -->
<xsl:template match="/Bookings/Booking/Users" mode="signature">
    <span class="name"><xsl:value-of select="./@Name"/></span>
    <span class="job"><xsl:value-of select="./@Title"/></span>
</xsl:template>
</xsl:stylesheet>

这是文件的标题
一些内容

不幸的是,签名模板不起作用,我也不明白为什么:(尽管它对docTitle起作用)

结果HTML如下所示:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <title></title>
   </head>
   <body>      
      <p class="date">16 February 2010</p>
      <div id="secondDeposit">
         <p>SOME CONTENT</p>
         <!-- here I get lots of empty space -->
      </div>    
   </body>

2010年2月16日

一些内容

我想知道这样的想法是否可以在一般情况下实施,以及如何正确地实施,显然我的想法行不通

另外,在这种情况下,哪种方法更好:包含还是导入样式表?我认为使用其中一种方法,我不需要再次列出所有变量

如果有任何帮助,我将不胜感激!很抱歉发了这么长的帖子,如果不清楚的话


谢谢!

我使用以下方法:

模板文件(/templates/Main.xslt)


模板内容
函数文件(/Functions/General.xslt)


页面文件(/default.xslt)

在模板中会有一些用于定义不同的布局。这是在进行转换时调用的XSLT文件

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:import href="templates/Main.xslt" />
    <xsl:output method="xml" encoding="utf-8" />
    <xsl:template match="/">
        <xsl:apply-imports />
    </xsl:template>
    <!-- CONTENT -->
    <xsl:template name="PageContent">
      <!-- Put your specific page stuff here -->
    </xsl:template>
</xsl:stylesheet>

建议在样式表文件中积累常用模板,这些模板将由特定的XSLT应用程序导入。收集这些有用的xstylesheet文件可以创建有用的

当然,导入的样式表模块通常会导入其他样式表模块


XSLT中的函数编程示例。请务必了解XSLT应用程序(示例testxxx.xsl文件)如何导入所需的功能。

@Tomalak,感谢您编辑HTML。无法理解如何执行此操作:(谢谢!哦,亲爱的…我刚刚意识到我的测试XML中没有元素。我很抱歉!不过,我很想听听人们在类似情况下使用的方法:如何更好地在多个样式表之间分离通用和特定模板。谢谢!)@Dimitre Novatchev,谢谢你的链接。我试着研究了一些例子,但我在其中迷失了方向=/也许,你知道一些文章或初学者的阅读材料?非常感谢!@Daria这是指向FXSL 1.x文章(FXSL for XSLT 1.0)的链接:这是指向FXSL 2.x文章(FXSL for XSLT 2.0)的链接:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" encoding="utf-8" />
  <xsl:include href="../functions/General.xslt"/>
  <xsl:template match="/">
    <html xml:lang="en">
      <head>
      </head>
      <body>
         Template Content
         <xsl:call-template name="PageContent" />
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <!-- Generic functions used in the site go in here -->
</xsl:stylesheet>
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:import href="templates/Main.xslt" />
    <xsl:output method="xml" encoding="utf-8" />
    <xsl:template match="/">
        <xsl:apply-imports />
    </xsl:template>
    <!-- CONTENT -->
    <xsl:template name="PageContent">
      <!-- Put your specific page stuff here -->
    </xsl:template>
</xsl:stylesheet>