2013-07-08 60 views
-1

任何人都可以請幫助我對每個不同的packnumber的序列號的邏輯如下。 輸入:XSLT 1.0中循環序列號的條件

<Move-Afile> 
    <Afile> 
    <Item> 
     <PackNumber>1234</PackNumber> 
    </Item> 
    <Item> 
     <PackNumber>1234</PackNumber> 
    </Item> 
    <Item> 
     <PackNumber>1234</PackNumber> 
    </Item> 
    <Item> 
     <PackNumber>126</PackNumber><!-- different PackNumber counter start from 1 --> 
    </Item> 
    <Item> 
     <PackNumber>126</PackNumber> 
    </Item> 
    <Item> 
     <PackNumber>135</PackNumber><!-- different PackNumber counter start from 1 --> 
    </Item> 
    <Item> 
     <PackNumber>135</PackNumber> 
    </Item> 
    </Afile> 
</Move-Afile> 

<Item>是無界的element.for每個Item PackNumber是present.Here有像對於每個唯一<PackNumber>計數器應從1開始並遞增得到像下面輸出的條件。

輸出:

<?xml version="1.0"?> 
<A> 
    <target> 
    <counter>1</counter> 
    <PNumber>1234</PNumber> 
    <counter>2</counter> 
    <PNumber>1234</PNumber> 
    <counter>3</counter> 
    <PNumber>1234</PNumber> 
    <counter>1</counter><!-- different PackNumber counter start from 1 --> 
    <PNumber>126</PNumber> 
    <counter>2</counter> 
    <PNumber>126</PNumber> 
    <counter>1</counter><!-- different PackNumber counter start from 1 --> 
    <PNumber>135</PNumber> 
    <counter>2</counter> 
    <PNumber>135</PNumber> 
    </target> 
</A> 

回答

3

這個最好的辦法是看看進行分組。例如muenchian分組http://www.jenitennison.com/xslt/grouping/muenchian.html爲xslt-1.0。

因此,你可以嘗試這樣的事:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes"/> 
    <xsl:key name="kItem" match="Item" use="PackNumber"/> 

    <xsl:template match="/*"> 
     <A> 
      <target> 
       <xsl:for-each select="Afile/Item[generate-id(.)=generate-id(key('kItem',PackNumber)[1])]"> 
        <xsl:variable name="pnr" select="PackNumber" /> 
        <xsl:for-each select="key('kItem', $pnr)" > 
         <counter> 
          <xsl:value-of select="position()"/> 
         </counter> 
         <PNumber> 
          <xsl:value-of select="$pnr"/> 
         </PNumber> 
        </xsl:for-each> 
       </xsl:for-each> 
      </target> 
     </A> 
    </xsl:template> 

</xsl:stylesheet> 

這將產生以下輸出:

<A> 
    <target> 
    <counter>1</counter> 
    <PNumber>1234</PNumber> 
    <counter>2</counter> 
    <PNumber>1234</PNumber> 
    <counter>3</counter> 
    <PNumber>1234</PNumber> 
    <counter>1</counter> 
    <PNumber>126</PNumber> 
    <counter>2</counter> 
    <PNumber>126</PNumber> 
    <counter>1</counter> 
    <PNumber>135</PNumber> 
    <counter>2</counter> 
    <PNumber>135</PNumber> 
    </target> 
</A> 
+0

這是工作fine.Thanks很多關於你的幫助。 – sum