<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ssml="http://www.w3.org/2001/10/synthesis" exclude-result-prefixes="#all" version="2.0"> <xsl:param name="ids-in-order" as="xs:string*" required="yes"/> <xsl:key name="sentences" match="ssml:s" use="@id"/> <xsl:key name="ids" match="*[@id]" use="@id"/> <xsl:variable name="ssml-docs"> <ssml:all> <xsl:sequence select="collection()"/> </ssml:all> </xsl:variable> <xsl:variable name="ids-doc"> <tmp:ids xmlns:tmp="http://www.daisy.org/ns/pipeline/tmp"> <xsl:for-each select="$ids-in-order"> <tmp:element id="{.}"/> </xsl:for-each> </tmp:ids> </xsl:variable> <xsl:template match="/"> <ssml:speak version="1.1"> <xsl:for-each select="$ids-in-order"> <xsl:variable name="id" select="."/> <xsl:copy-of select="key('sentences',$id,$ssml-docs)"/> </xsl:for-each> <xsl:for-each select="$ssml-docs/ssml:all/ssml:speak/ssml:s"> <xsl:if test="not(key('ids',@id,$ids-doc))"> <xsl:copy-of select="."/> </xsl:if> </xsl:for-each> </ssml:speak> </xsl:template> </xsl:stylesheet>