XSLT抽象

Wil*_*ung 10 html xml xslt

我正在探索用于生成Web内容的XML - > XSLT - > HTML meme.我的XSLT经验很少.

我很好奇XSLT中有哪些机制可用于处理抽象或"重构".

例如,对于通用HTML和服务端包含,可以将许多页面模板化并分解为具有(例如)公共标题,导航和页脚段的位置,并且页面本身基本上是正文.

常见的标记语言JSP,PHP,ASP,允许所有这些段具有动态内容(例如将用户名添加到每个标题块).

JSP通过允许您创建Tag文件甚至更远,它可以接受在生成内容时使用的参数,甚至可以包围和处理标记本身内容.

我很好奇在XSLT中完成了类似的功能.有什么设施可以为创建HTML页面之类的东西制作可重复使用的XSLT块?

Swa*_*ati 14

对于我自己的项目,这是我分页的方式.有一个template.xsl文件,由我的每个XSL导入.大多数网页只是有template.xsl,但一些网页,如购物车等必须的,因为不同种类的数据,他们分析自己.

<page title="Home">
    <navigation>
        <!-- something here -->
    </navigation>
    <main>
        <!-- something here -->
    </main>
</page>
Run Code Online (Sandbox Code Playgroud)

这是我的template.xsl的一个片段.我把所有常见的东西都扔进了这里,然后给了我的页面添加自己信息的机会call-template.

<xsl:template match="/page" name="page">  
    <html>
    <head>  
        <title><xsl:value-of select="(@title)" /></title>           
        <xsl:call-template name="css" />
        <xsl:call-template name="script" />
    </head>
    <body>
        <xsl:call-template name="container" />
    </body>
    </html>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)

我的css标签如何响应的一个例子.请注意,它调用css-extended.css只有适用于所有页面的公共css'.有些页面需要更多.那些可以覆盖css扩展.请注意,这是必需的,因为call-template如果页面调用模板但未在任何位置定义模板,则会失败.

   <xsl:template name="css">
        <link rel="stylesheet" type="text/css" href="{$cssPath}reset.css"  />
        <link rel="stylesheet" type="text/css" href="{$cssPath}style.css"  />
        <link rel="stylesheet" type="text/css" href="{$cssPath}layout.css" />
        <xsl:call-template name="css-extended" />
    </xsl:template>   

    <!-- This is meant to be blank. It gets overriden by implementing stylesheets -->
    <xsl:template name="css-extended" />
Run Code Online (Sandbox Code Playgroud)

我的容器将以类似的方式工作 - 定义了常见的东西,然后每个页面只能提供一个实现.XSL中的默认实现.(中content)

  <xsl:template name="container">
        <div id="container">
            <xsl:call-template name="header" />
            <xsl:call-template name="content" />
            <xsl:call-template name="footer" />
        </div>
    </xsl:template>  

    <xsl:template name="content">
        <div id="content">
            <div id="content-inner">
                <xsl:call-template name="sideBar" />
                <xsl:call-template name="main" />
            </div>
        </div>
    </xsl:template>   

    <xsl:template name="main">
        <div id="main">
            <xsl:apply-templates select="main" />
            <xsl:call-template name="main-extended" />
       </div>
    </xsl:template>

    <!-- This is meant to be blank. It gets overriden by implementing stylesheets -->
    <xsl:template name="main-extended" />

<xsl:template name="footer">
        <div id="footer">
        <div id="footer-inner">
        <!-- Footer content here -->
        </div>
        </div>
</xsl:template>  
Run Code Online (Sandbox Code Playgroud)

它对我来说非常漂亮.如果有任何问题我可以为您解答,请告诉我.


And*_*ard 5

模板,包括.

Xsl与任何其他编程语言都有很大的不同. Its rule based.

我建议你阅读一些关于Xslt的内容,然后再问一下这个问题.