我已经制作了两页,现在我想知道我是否可以干它们。
这里是XSLT:
首页:http://pastebin.com/yuZL913W dagboek-page:http://pastebin.com/6FGYvpvf(已编辑)
鲁洛夫
抱歉其中一个链接错了。 我编辑了这个。
我的问题是如何干这些,所以我可以重复使用零件。只有<div id="posts">
不同。
我想我理解空白的填充,但它是一个大的xslt文件。如果没有命名模板和调用模板,这是否可行
答案 0 :(得分:2)
这是一种方式 - 我称之为“填空”将内容与处理和参数化处理分开:
渲染文件(c:/temp/delete/nc3.xml):
<html xmlns:gen="gen:gen">
<gen:data from="params" mode="top"/>
<body >
<div id="outer">
<div id="container">
<div id="search">
<form method="get" id="searchform" action="http://www.notepadchaos.com/">
<input type="text" value="" name="s" id="s" class="txtField" />
<input type="submit" id="searchsubmit" class="btnSearch" value="Find It " />
</form>
</div>
<div id="title">
<h2>Tamara Wobben</h2>
</div>
</div>
<div id="content">
<div class="col01">
<div class="post">
<h3> <gen:data from="entry/title"/> </h3>
<div class="post-inner">
<gen:data from="section/entry/tekst" />
</div></div></div>
<div class="side-columns">
<div class="col02">
<div class="pages">
<!-- hier komen de losse pagina's -->
</div>
<div class="pages-bottom"></div>
<div class="categories-upper"></div>
<div class="categories">
<!-- hier komt het menu -->
</div>
<div class="categories-btm"></div>
</div>
<div class ="col03">
<div class="recent-post" >
<!-- hier komen de recente posts -->
</div>
<div class="postit-bottom"></div>
</div>
</div>
<br style="clear:both" />
</div>
<gen:data from="params" mode="down"/>
</div>
</body>
</html>
数据文件(c:/temp/delete/data.xml):
<data>
<params>
<today>2011-12-29</today>
<current-time>22:17</current-time>
<this-year>2011</this-year>
<this-month>12</this-month>
<this-day>29</this-day>
<timezone>+01:00</timezone>
<website-name>Tamara Wobben</website-name>
<page-title>frontpage</page-title>
<root>http://test.tamarawobben.nl</root>
<workspace>http://test.tamarawobben.nl/workspace</workspace>
<root-page>frontpage</root-page>
<current-page>frontpage</current-page>
<current-page-id>6</current-page-id>
<current-path>/?debug=xml</current-path>
<parent-path>/</parent-path>
<current-url>http://test.tamarawobben.nl/?debug=xml</current-url>
<upload-limit>2097152</upload-limit>
<symphony-version>2.2.5</symphony-version>
<cookie-username>xxxx</cookie-username>
<cookie-pass>xxxxx</cookie-pass>
<site-mode>live</site-mode>
</params>
<events />
<image>
<section id="7" handle="images">Images</section>
<entry id="13">
<image size="22 KB" path="/images" type="image/jpeg">
<filename>img_5874.jpg</filename>
<meta creation="2011-12-19T18:40:04+01:00" width="400" height="267" />
</image>
</entry>
</image>
<recent-posts>
<section id="9" handle="dagboek">Dagboek</section>
<entry id="15">
<datum time="00:00" weekday="2">2005-02-22</datum>
<titel handle="7-weken-echo">7 weken echo</titel>
</entry>
</recent-posts>
<section>
<section id="6" handle="sections">Sections</section>
<entry id="12">
<title handle="even-voorstellen">Even Voorstellen</title>
<tekst><p>FLOAT : img_5874.jpg</p> 55 56<p>Naam : Tamara Wobben<br /> 57Geboorte gewicht : 2000 gram<br /> 58Geboorte lengte : 44 cm.<br /> 59Geboortedatum : 1 september 2005 </p>
</tekst>
</entry>
</section>
</data>
XSLT代码:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:gen="gen:gen" exclude-result-prefixes="gen">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:param name="pFormPath" select=
"'file:///c:/temp/delete/nc3.xml'"/>
<xsl:param name="pDataPath" select=
"'file:///c:/temp/delete/data.xml'"/>
<xsl:variable name="vFormDoc" select="document($pFormPath)"/>
<xsl:variable name="vDataDoc" select="document($pDataPath)"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/">
<xsl:apply-templates select="$vFormDoc/*"/>
</xsl:template>
<xsl:template match=
"gen:data
[@from='params'
and
@mode='top'
]">
<!-- Use $vDataDoc to populate this -->
T O P S T U F
</xsl:template>
<xsl:template match=
"gen:data[@from='entry/Title']">
<!-- Use $vDataDoc to populate this -->
E N T R Y T I T L E
</xsl:template>
<xsl:template match=
"gen:data[@from='section/entry/tekst']">
<!-- Use $vDataDoc to populate this -->
S E C T I O N E N T R Y T E X T
</xsl:template>
<xsl:template match=
"gen:data
[@from='params'
and
@mode='down'
]">
<!-- Use $vDataDoc to populate this -->
D O W N S T U F
</xsl:template>
</xsl:stylesheet>
源XML文件(未使用):
<t/>
对任何XML文件(未使用)执行上述转换时,将使用数据文件中的数据填充呈现文件。处理占位符gen:data
元素的模板是虚拟的,但仍然演示了此处理的工作原理。
处理结果:
<html xmlns:gen="gen:gen">
T O P S T U F
<body>
<div id="outer">
<div id="container">
<div id="search">
<form method="get" id="searchform" action="http://www.notepadchaos.com/"><input type="text" value="" name="s" id="s" class="txtField"><input type="submit" id="searchsubmit" class="btnSearch" value="Find It "></form>
</div>
<div id="title">
<h2>Tamara Wobben</h2>
</div>
</div>
<div id="content">
<div class="col01">
<div class="post">
<h3>
<gen:data from="entry/title"></gen:data>
</h3>
<div class="post-inner">
S E C T I O N E N T R Y T E X T
</div>
</div>
</div>
<div class="side-columns">
<div class="col02">
<div class="pages">
<!-- hier komen de losse pagina's -->
</div>
<div class="pages-bottom"></div>
<div class="categories-upper"></div>
<div class="categories">
<!-- hier komt het menu -->
</div>
<div class="categories-btm"></div>
</div>
<div class="col03">
<div class="recent-post">
<!-- hier komen de recente posts -->
</div>
<div class="postit-bottom"></div>
</div>
</div><br style="clear:both"></div>
D O W N S T U F
</div>
</body>
</html>
请注意:
此代码可以使用来自任何数据文档的数据(再次作为外部参数传递的路径)填充任何渲染文档(作为外部参数传递的路径)。因此,可以创建填充不同数据的不同输出/格式。
要替换为“实时内容”的占位符(gen:data
元素)可以具有不同的格式和语义 - 对一个人的想象力没有限制。
编辑(非XSLT专家)可以相互独立地处理一个或多个渲染文档,也可以从XSLT开发人员处理。
实现了更高程度的可重用性,灵活性和可维护性。