首页
学习
活动
专区
圈层
工具
发布

XSLT抽象
EN

Stack Overflow用户
提问于 2008-10-03 15:34:50
回答 6查看 5.4K关注 0票数 10

我正在探索用于生成->内容的meme。我几乎没有XSLT经验。

我很好奇XSLT中有什么机制可以用来处理抽象或“重构”。

例如,使用通用HTML和服务端包含,可以将许多页面模板化并分解为常见的页眉、导航和页脚段,页面本身基本上就是正文。

常见的标记语言JSP、PHP、ASP甚至允许所有这些段都有动态内容(比如将用户名添加到每个标题块中)。

JSP更进一步,允许您创建标记文件,该文件可以接受在生成内容时使用的参数,甚至可以在标记本身内包围和处理内容。

我很好奇XSLT中也有类似的功能。对于创建HTML页面这样的事情,有哪些工具可以使XSLT块可重用?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2008-10-03 15:53:06

对于我自己的项目,这就是我如何划分我的页面。我的每个XSL都导入了一个template.xsl文件。大多数页面只有template.xsl,但一些页面,如购物车等,需要自己的,因为它们解析的数据种类不同。

代码语言:javascript
复制
<page title="Home">
    <navigation>
        <!-- something here -->
    </navigation>
    <main>
        <!-- something here -->
    </main>
</page>

这是我的template.xsl中的一个片段。我在这里加入了所有常见的东西,然后给我的页面提供了通过call-template添加自己的信息的机会。

代码语言:javascript
复制
<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>

我的css标签如何响应的示例。请注意,它调用的css-extended. css只有将应用于所有页面的公共css。有些页面需要更多。这些可以覆盖css-extended。请注意,这是必需的,因为如果页面调用模板但没有在任何地方定义它,call-template将失败。

代码语言:javascript
复制
   <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" />

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

代码语言:javascript
复制
  <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>  

它对我来说非常好用。如果有任何问题我可以回答你,请让我知道。

票数 14
EN

Stack Overflow用户

发布于 2008-10-03 15:37:53

模板,包括。

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

我建议您先阅读something中关于Xslt的内容,然后再问一些更具体的问题。

票数 5
EN

Stack Overflow用户

发布于 2008-10-03 15:44:31

您可以使用xsl Include和Import语句来抽象页面的各个部分。XSLT本身在很大程度上可以重现标记文件类型的行为。您可以使用所需的标签编辑xml数据文件。同时,当您的xsl模板遇到这些标记时,它们将知道如何处理这些标记。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/167453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档