如何干掉这些XSLT文档

时间:2011-12-29 11:23:57

标签: xslt dry

我已经制作了两页,现在我想知道我是否可以干它们。

这里是XSLT:

首页:http://pastebin.com/yuZL913W dagboek-page:http://pastebin.com/6FGYvpvf(已编辑)

鲁洛夫

抱歉其中一个链接错了。 我编辑了这个。

我的问题是如何干这些,所以我可以重复使用零件。只有<div id="posts">不同。 我想我理解空白的填充,但它是一个大的xslt文件。如果没有命名模板和调用模板,这是否可行

1 个答案:

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

请注意

  1. 此代码可以使用来自任何数据文档的数据(再次作为外部参数传递的路径)填充任何渲染文档(作为外部参数传递的路径)。因此,可以创建填充不同数据的不同输出/格式。

  2. 要替换为“实时内容”的占位符(gen:data元素)可以具有不同的格式和语义 - 对一个人的想象力没有限制。

  3. 编辑(非XSLT专家)可以相互独立地处理一个或多个渲染文档,也可以从XSLT开发人员处理。

  4. 实现了更高程度的可重用性,灵活性和可维护性。