2013-07-08 49 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