2013-12-17 42 views
0

我有一個庫對象,其中包含書籍的集合...庫對象具有諸如名稱,地址,電話等屬性雖然書籍對象具有諸如ISDN,標題,作者和價格。包含列表的XSL重複模板對象<Object>

XML看起來是這樣的......

<Library> 
    <Name>Metro Library</Name> 
    <Address>1 Post Rd. Brooklyn, NY 11218</Address> 
    <Phone>800 976-7070</Phone> 
    <Books> 
     <Book> 
      <ISDN>123456789</ISDN> 
      <Title>Fishing with Luke</Title> 
      <Author>Luke Miller</Author> 
      <Price>18.99</Price> 
     </Book> 
     <Book> 
      <ISDN>234567890</ISDN> 
      <Title>Hunting with Paul</Title> 
      <Author>Paul Worthington</Author> 
      <Price>28.99</Price> 
     </Book> 
     ... 
     And more books 
     ... 
    </Books> 
</Library> 

我有空間模板只有10%的頁面的例子。書籍列表中可能有數百本書...因此,我需要限制書籍數量並每10本書重複一次模板。

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="/"> 
     <html> 
      <body> 
       <div> 
        <table> 
         <tr> 
          <td>NAME</td> 
          <td><xsl:value-of select="/Library/Name"/></td>    
         </tr> 
        <tr> 
          <td>ADDRESS</td> 
          <td><xsl:value-of select="/Library/Address"/></td>    
         </tr> 
         <tr> 
          <td>PHONE</td> 
          <td><xsl:value-of select="/Library/Phone"/></td>    
         </tr> 
        </table> 
        <table> 
         <xsl:for-each select="/Library/Books/Book"> 
          <tr> 
           <td><xsl:value-of select="position()"/></td> 
           <td><xsl:value-of select="ISDN"/></td> 
           <td><xsl:value-of select="Title"/></td> 
           <td><xsl:value-of select="Author"/></td> 
           <td><xsl:value-of select="Price"/></td>     
          </tr> 
         </xsl:for-each> 
        </table> 
       </div> 
      </body> 
     </html> 
    </xsl:template> 
</xsl:stylesheet> 

我怎樣才能獲得圖書信息出現在所有重複頁面以及每頁添加10本書?...第一頁有1書籍到第十的庫信息,第二頁有圖書11圖書館信息直通20,等等?

感謝

回答

0

對於初學者來說,儘量不要使用for-eachapply-templates讓引擎優化的事件的處理順序。

看來你是從其他系統調用這個樣式表,所以我採取的方法是定義一個分頁param。在主機語言中,當你調用這個時只需改變根參數。然後,您可以在此選擇此行中的要求頁面:

Books/Book[($page - 1)*10 &lt; position() and position() &lt;= ($page)*10] 

這應該有所斬斷。

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:param name="page" select="1"/> 
    <xsl:template match="/Library"> 
    <html> 
     <body> 
      <div> 
       <table> 
        <tr> 
         <td>NAME</td> 
         <td> 
          <xsl:value-of select="/Name"/> 
         </td> 
        </tr> 
        <tr> 
         <td>ADDRESS</td> 
         <td> 
          <xsl:value-of select="/Address"/> 
         </td> 
        </tr> 
        <tr> 
         <td>PHONE</td> 
         <td> 
          <xsl:value-of select="/Phone"/> 
         </td> 
        </tr> 
       </table> 
       <table> 
        <xsl:apply-templates select="Books/Book[($page - 1)*10 &lt; position() and position() &lt;= ($page)*10]"/> 
       </table> 
      </div> 
     </body> 
    </html> 
    </xsl:template> 
    <xsl:template match="/Book"> 
    <tr> 
     <td> 
      <xsl:value-of select="position()"/> 
     </td> 
     <td> 
      <xsl:value-of select="ISDN"/> 
     </td> 
     <td> 
      <xsl:value-of select="Title"/> 
     </td> 
     <td> 
      <xsl:value-of select="Author"/> 
     </td> 
     <td> 
      <xsl:value-of select="Price"/> 
     </td> 
    </tr> 
    </xsl:template> 
</xsl:stylesheet>