gpt4 book ai didi

html - XSLT 抽象

转载 作者:太空狗 更新时间:2023-10-29 13:05:02 27 4
gpt4 key购买 nike

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

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

例如,使用通用 HTML 和服务端包含,许多页面可以被模板化并分解到有公共(public)页眉、导航和页 footer 分的地方,而页面本身基本上就是主体。

JSP、PHP、ASP 等常见标记语言允许所有这些段都具有动态内容(例如将用户名添加到每个标题 block )。

JSP 走得更远,它允许您创建标签文件,这些文件可以接受在生成内容时使用的参数,甚至可以包围和处理标签本身内的内容。

我很好奇在 XSLT 中完成了类似的功能。有哪些工具可以为诸如创建 HTML 页面之类的事情制作可重用的 XSLT block ?

最佳答案

对于我自己的项目,这就是我划分页面的方式。有一个导入的 template.xsl 文件通过我的每个 XSL。大多数页面只有 template.xsl,但一些页面(例如购物车等)需要自己的因为他们解析的数据类型不同。

<page title="Home">
<navigation>
<!-- something here -->
</navigation>
<main>
<!-- something here -->
</main>
</page>

这是我的 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>

我的 css 标签如何响应的示例。请注意,它仅调用 css-extended. css具有适用于所有页面的通用 CSS。有些页面需要更多。那些可以覆盖 css 扩展。请注意,这是必需的,因为如果页面调用模板但未在任何地方定义它。

   <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 中。 (在内容中)

  <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>

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

关于html - XSLT 抽象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/167453/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com