<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/" xmlns:pef="http://www.daisy.org/ns/2008/pef" version="2.0"> <xsl:variable name="metadata" select="collection()[2]//opf:metadata"/> <xsl:template match="*[local-name()='meta']"> <xsl:variable name="this" select="."/> <xsl:copy> <xsl:apply-templates select="@*|node()"/> <xsl:for-each select="( 'title', 'creator', 'subject', 'description', 'language', 'publisher', 'contributor', 'date')"> <xsl:variable name="name" select="."/> <xsl:if test="not($this/dc:*[local-name()=$name])"> <xsl:variable name="value" select="( $metadata/dc:*[local-name()=$name]/string(), $metadata/opf:meta[(string(@name),string(@property))=($name,concat('dc:',$name),concat('dcterms:',$name))]/string(), $metadata/opf:meta[(string(@name),string(@property))=($name,concat('dc:',$name),concat('dcterms:',$name))]/@content/string())[1]"/> <xsl:if test="$value != ''"> <xsl:element name="dc:{$name}"> <xsl:sequence select="$value"/> </xsl:element> </xsl:if> </xsl:if> </xsl:for-each> </xsl:copy> </xsl:template> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <xsl:template match="/pef:*"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> </xsl:stylesheet>