Как то так?
Он также использует уникальное пространство имен для добавляемого нами атрибута, поэтому мы не перезаписываем существующие атрибуты нашими, если они имеют одинаковые имена.
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl" xmlns:mycomp="http://www.myuniquenamespace">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="node()">
<xsl:element name="{local-name()}" namespace="{namespace-uri()}">
<xsl:apply-templates select="@*"/>
<xsl:attribute name="someattr" namespace="http://www.myuniquenamespace">
<xsl:value-of select="generate-id()"/>
</xsl:attribute>
<xsl:apply-templates select="node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="@* | text()">
<xsl:copy />
</xsl:template>
</xsl:stylesheet>
Надеюсь, это поможет вам на вашем пути,