<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:opf="http://www.idpf.org/2007/opf" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0" exclude-result-prefixes="#all"> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <xsl:template match="/opf:metadata/dc:identifier" name="identifier"> <xsl:variable name="id" select="generate-id()"/> <xsl:choose> <xsl:when test="//@id=$id"> <xsl:call-template name="identifier"/> </xsl:when> <xsl:otherwise> <xsl:copy> <xsl:apply-templates select="@*"/> <xsl:attribute name="id" select="$id"/> <xsl:apply-templates select="node()"/> </xsl:copy> </xsl:otherwise> </xsl:choose> </xsl:template> </xsl:stylesheet>