2014-11-24 73 views
-1

我在我的XSLT試圖在XSLT 1.0XSLT 1.0 ..基於動態參數

<Sheets> 
    <Sheet> 
     <ROI>5350</ROI> 
     <TPI>830</TPI> 
    </Sheet> 
    <Sheet> 
     <ROI>5459</ROI> 
     <TPI>830</TPI> 
    </Sheet> 
    <Sheet> 
     <ROI>5350</ROI> 
     <TPI>856</TPI> 
    </Sheet> 
    <Sheet> 
     <ROI>5678</ROI> 
     <TPI>856</TPI> 
    </Sheet> 
    <Sheet> 
     <ROI>17473</ROI> 
     <TPI>856</TPI> 
    </Sheet> 
    <Sheet> 
     <ROI>5350</ROI> 
     <TPI>857</TPI> 
    </Sheet> 
    <Sheet> 
     <ROI>5713</ROI> 
     <TPI>857</TPI> 
    </Sheet> 
</Sheets> 

一些分組組的元素,我想通過一個動態值數說4 ...我想我的XML到組4個表元素的一組像

<Sheets> 
    <set> 
    <Sheet> 
     <ROI>5350</ROI> 
     <TPI>830</TPI> 
    </Sheet> 
    <Sheet> 
     <ROI>5459</ROI> 
     <TPI>830</TPI> 
    </Sheet> 
    <Sheet> 
     <ROI>5350</ROI> 
     <TPI>856</TPI> 
    </Sheet> 
    <Sheet> 
     <ROI>5678</ROI> 
     <TPI>856</TPI> 
    </Sheet> 
    </set> 
    <set> 
    <Sheet> 
     <ROI>17473</ROI> 
     <TPI>856</TPI> 
    </Sheet> 
    <Sheet> 
     <ROI>5350</ROI> 
     <TPI>857</TPI> 
    </Sheet> 
    <Sheet> 
     <ROI>5713</ROI> 
     <TPI>857</TPI> 
    </Sheet> 
    </set> 
</Sheets> 

等,組4片材以一組和其他4於一組,最後到一個休息其中設置

+0

你能告訴我完整的輸出嗎? – 2014-11-24 18:25:27

+0

即時通訊不能以上顯示..基本上我想組牀單設置成數字,我們動態通過 – Sujan 2014-11-24 18:28:44

+0

謝謝丹尼爾,是的,這就是我想要它。 – Sujan 2014-11-24 18:31:01

回答

0

在這裏,你是

我提供族元素的組PARAM

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="2.0"> 
    <xsl:output method="xml"/> 
    <xsl:param name="group" select="4"/> 
    <xsl:template match="/"> 
     <xsl:variable name="num_of_loos" select="ceiling(count(//Sheet) div number($group))"/> 
     <root> 
      <xsl:call-template name="loop"> 
       <xsl:with-param name="i">1</xsl:with-param> 
      </xsl:call-template> 
     </root> 
    </xsl:template> 
    <xsl:template name="loop"> 
     <xsl:param name="i"/> 
     <xsl:if test="$i &lt;= count(//Sheet)"> 
      <set> 
       <xsl:for-each select="//Sheet[position() &gt;= $i and position() &lt; ($i + $group)]"> 
        <xsl:copy-of select="."/> 
       </xsl:for-each> 
      </set> 
      <xsl:call-template name="loop"> 
       <xsl:with-param name="i" select="$i + $group"/> 
      </xsl:call-template> 
     </xsl:if> 
    </xsl:template> 
</xsl:stylesheet> 

下面是輸出

<?xml version="1.0" encoding="UTF-8"?> 

<root xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <set> 
     <Sheet> 
      <ROI>5350</ROI> 
      <TPI>830</TPI> 
     </Sheet> 
     <Sheet> 
      <ROI>5459</ROI> 
      <TPI>830</TPI> 
     </Sheet> 
     <Sheet> 
      <ROI>5350</ROI> 
      <TPI>856</TPI> 
     </Sheet> 
     <Sheet> 
      <ROI>5678</ROI> 
      <TPI>856</TPI> 
     </Sheet> 
    </set> 
    <set> 
     <Sheet> 
      <ROI>17473</ROI> 
      <TPI>856</TPI> 
     </Sheet> 
     <Sheet> 
      <ROI>5350</ROI> 
      <TPI>857</TPI> 
     </Sheet> 
     <Sheet> 
      <ROI>5713</ROI> 
      <TPI>857</TPI> 
     </Sheet> 
    </set> 
</root> 
0

當你想安排元素融入規定數目,那麼一個辦法接近它是最初選擇將在每個集合中的第一個元素

<xsl:for-each select="Sheet[position() mod $num = 1]"> 

然後,您可以選擇集合中的元素,比如(i .E。選擇當前元素,和那些跟隨它基於

<xsl:for-each select="Sheet[position() mod $num = 1]"> 
    <Set> 
     <xsl:apply-templates select="self::*|following-sibling::Sheet[position() &lt; $num]" /> 
    </Set> 
</xsl:for-each> 

所需的數量)試試這個XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes" /> 

    <xsl:param name="num" select="'4'" /> 

    <xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="/Sheets"> 
    <xsl:copy> 
     <xsl:for-each select="Sheet[position() mod $num = 1]"> 
      <Set> 
      <xsl:apply-templates select="self::*|following-sibling::Sheet[position() &lt; $num]" /> 
      </Set> 
     </xsl:for-each> 
    </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 

注意使用XSLT identity template的複製,在整個不變的元素。