Один из способов (возможно, не самый эффективный, но простой) - подсчитать предыдущие элементы с одинаковым значением.Вы можете использовать xsl:number
для форматирования в виде буквы.
Пример ...
Ввод XML (завернутый в doc
, чтобы сделать правильно сформированный)
<doc>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>1234</Element-4>
<Element-5>ZZ</Element-5>
</Segment-PO>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>00378</Element-4>
<Element-5>ZZ</Element-5>
</Segment-PO>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>4321</Element-4>
<Element-5>ZZ</Element-5>
</Segment-PO>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>00378</Element-4>
<Element-5>ZZ</Element-5>
</Segment-PO>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>00666</Element-4>
<Element-5>BB</Element-5>
</Segment-PO>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>5678</Element-4>
<Element-5>ZZ</Element-5>
</Segment-PO>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>8765</Element-4>
<Element-5>AA</Element-5>
</Segment-PO>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>00666</Element-4>
<Element-5>ZZ</Element-5>
</Segment-PO>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>00666</Element-4>
<Element-5>BB</Element-5>
</Segment-PO>
</doc>
XSLT 1.0
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Element-4">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<xsl:if test="preceding::Element-4[.=current()]">
<xsl:number value="count(preceding::Element-4[.=current()])" format="A"/>
</xsl:if>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Выход
<doc>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>1234</Element-4>
<Element-5>ZZ</Element-5>
</Segment-PO>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>00378</Element-4>
<Element-5>ZZ</Element-5>
</Segment-PO>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>4321</Element-4>
<Element-5>ZZ</Element-5>
</Segment-PO>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>00378A</Element-4>
<Element-5>ZZ</Element-5>
</Segment-PO>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>00666</Element-4>
<Element-5>BB</Element-5>
</Segment-PO>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>5678</Element-4>
<Element-5>ZZ</Element-5>
</Segment-PO>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>8765</Element-4>
<Element-5>AA</Element-5>
</Segment-PO>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>00666A</Element-4>
<Element-5>ZZ</Element-5>
</Segment-PO>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>00666B</Element-4>
<Element-5>BB</Element-5>
</Segment-PO>
</doc>
Рабочая скрипка: http://xsltfiddle.liberty -развитие.net / 94hvTzU