Я предполагаю, что в требуемом выводе значение атрибута VALUE
должно быть положением его родительского элемента в последовательности /A/B
Тогда это преобразование :
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="B/@VALUE[not(. = count(../preceding-sibling::B) +1 )]">
<xsl:attribute name="VALUE">
<xsl:value-of select="count(../preceding-sibling::B) + 1"/>
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
при применении к предоставленному документу XML :
<A>
<B VALUE = "1"/>
<B VALUE = "1"/>
</A>
дает требуемый результат :
<A>
<B VALUE="1"/>
<B VALUE="2"/>
</A>