2013-05-22 49 views
1

這裏是XML:如何在xslt中分頁xml?

<?xml version="1.0" encoding="UTF-8"?> 
<sitemapnode> 
    <n> 
     <node id="1"/> 
     <node id="2"/> 
     <node id="3"/> 
    </n> 
    <n> 
     <node id="4"/> 
     <node id="5"/> 
     <node id="6"/> 
     <node id="7"/> 
     <node id="8"/> 
    </n> 
    <n> 
     <node id="9"/> 
     <node id="10"/> 
    </n> 
    <n> 
     <node id="11"/> 
     <node id="12"/> 
    </n> 
</sitemapnode> 

我想讓它像:

<div> 
    <ul> 
     <li>1</li> 
     <li>2</li> 
     <li>3</li> 
     <li>4</li> 
    </ul> 
    <ul> 
     <li>5</li> 
     <li>6</li> 
     <li>7</li> 
     <li>8</li> 
    </ul> 
    <ul> 
     <li>9</li> 
     <li>10</li> 
     <li>11</li> 
     <li>12</li> 
    </ul> 
</div> 

我解決不了這個問題...

我嘗試這樣的:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes"/> 
    <xsl:variable name="number" select="ceiling(count(/*/*/node) div 3)"/> 
    <xsl:template match="*"> 
     <div> 
      <xsl:apply-templates select="/*/*/node[position() mod $number = 1]"/> 
     </div> 
    </xsl:template> 
    <xsl:template match="node"> 
     <ul> 
      <xsl:apply-templates select="self::node|following-sibling::node[position() &lt; $number]" mode="list"/> 
     </ul> 
    </xsl:template> 
    <xsl:template match="node" mode="list"> 
     <li> 
      <xsl:value-of select="@id"/> 
     </li> 
    </xsl:template> 
</xsl:stylesheet> 

轉換後,這裏是結果:

<div> 
    <ul> 
     <li>1</li> 
     <li>2</li> 
     <li>3</li> 
    </ul> 
    <ul> 
     <li>4</li> 
     <li>5</li> 
     <li>6</li> 
     <li>7</li> 
    </ul> 
    <ul> 
     <li>8</li> 
    </ul> 
    <ul> 
     <li>9</li> 
     <li>10</li> 
    </ul> 
    <ul> 
     <li>11</li> 
     <li>12</li> 
    </ul> 
</div> 

那不是我想要的。我怎樣才能做到這一點? 我正在使用XSLT 1.0和.Net 3.5。

回答

0

試試這個:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes"/> 
    <xsl:variable name="number" select="ceiling(count(/*/*/node) div 3)"/> 
    <xsl:template match="*"> 
     <div> 
      <xsl:apply-templates select="(/*/*/node)[position() mod $number = 1]"/> 
     </div> 
    </xsl:template> 
    <xsl:template match="node"> 
     <ul> 
      <xsl:apply-templates select="current() | 
             following::node[position() &lt; $number]" 
           mode="list"/> 
     </ul> 
    </xsl:template> 
    <xsl:template match="node" mode="list"> 
     <li> 
      <xsl:value-of select="@id"/> 
     </li> 
    </xsl:template> 
</xsl:stylesheet> 

當你的樣品輸入運行,其結果是:

<div> 
    <ul> 
    <li>1</li> 
    <li>2</li> 
    <li>3</li> 
    <li>4</li> 
    </ul> 
    <ul> 
    <li>5</li> 
    <li>6</li> 
    <li>7</li> 
    <li>8</li> 
    </ul> 
    <ul> 
    <li>9</li> 
    <li>10</li> 
    <li>11</li> 
    <li>12</li> 
    </ul> 
</div> 
+0

太謝謝你了! –