Eu resolvi com um arquivo xsl
como este:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="cig">
<lottoID><xsl:value-of select="generate-id(.)"/></lottoID>
<!-- a linefeed -->
<xsl:text>
</xsl:text>
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
O id
é gerado pela função generate-id
XPATH.
Dessa forma, copio todos os nós e insiro um identificador exclusivo no elemento <lottoID>
logo antes do elemento <cig>
(que é um elemento do meu arquivo XML de entrada ).
O comando com xmlstarlet é:
xmlstarlet tr stile.xsl input.xml