等しいノードは、単一のカウンター要素の下にある必要があります。入力:
<Move-Afile>
<Afile>
<Item>
<PACK050>
<PackNumber>1234</PackNumber>
</PACK050>
</Item>
<Item>
<PACK050>
<PackNumber>567</PackNumber>
</PACK050>
</Item>
<Item>
<PACK050>
<PackNumber>567</PackNumber>
</PACK050>
</Item>
<Item>
<PACK050>
<PackNumber>126</PackNumber>
</PACK050>
</Item>
<Item>
<PACK050>
<PackNumber>567</PackNumber>
</PACK050>
</Item>
</Afile>
</Move-Afile>
パック番号ごとにカウンター変数をインクリメントする必要がありますが、ここでは、前の値が現在の値と等しい場合、以下の出力のようにカウンターを無視する必要がある (インクリメントする必要はありません) など、1 つの条件が存在します。以下の出力のようなカウンター。
XSLT テンプレートには、<for-each>
次のような構造が含まれている必要があります。
<xsl:template match="/">
<A>
<target>
<xsl:for-each select="/Move-Afile/Afile/Item/PACK050/PackNumber">
<xsl:variable name="count">
<!-- get the count here-->
</xsl:variable>
<counter>$count</counter>
<PNumber><xsl:value-of select="."/></PNumber>
</xsl:for-each>
</target>
</A>
</xsl:template>
出力:
<A>
<target>
<Item>
<PACK050>
<counter>1</counter><!-- if previous <PackNumber> is not equal to current <PackNumber> increment the count-->
<PNumber>1234</PNumber>
</PACK050>
</Item>
<Item
<PACK050>
<counter>2</counter><!-- if previous <PackNumber> is not equal to current <PackNumber> increment the count-->
<PNumber>567</PNumber>
</PACK050>
</Item>
<Item><!-- if previous <PackNumber> is equal to current <PackNumber> ignore the counter -->
<PACK050>
<PNumber>567</PNumber>
</PACK050>
</Item>
<Item><!-- if previous <PackNumber> is equal to current <PackNumber> ignore the counter -->
<PACK050>
<PNumber>567</PNumber>
</PACK050>
</Item>
<Item>
<PACK050>
<counter>3</counter><!-- if previous <PackNumber> is not equal to current <PackNumber> increment the count-->
<PNumber>126</PNumber>
</PACK050>
</Item>
</target>
</A>