Если есть повторения одного и того же кода, может быть возможно реализовать их в шаблоне, так что пересмотр в любом случае полезен:
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:b="urn:ohLookHEREaNamespacedeclaration"
exclude-result-prefixes="b"
version="1.0">
<xsl:strip-space elements="*"/>
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/*">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="b:SAMPLE"/>
</xsl:element>
</xsl:template>
<xsl:template match="b:SAMPLE">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="b:SAMPLEID | b:LOCATION"/>
</xsl:element>
</xsl:template>
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
<xsl:template match="b:LOCATION">
<xsl:element name="{b:LOCATIONNAME}_1">
<xsl:value-of select="b:DATA[1]/b:DATAVALUE"/>
</xsl:element>
<xsl:element name="{b:LOCATIONNAME}_2">
<xsl:value-of select="b:DATA[2]/b:DATAVALUE | b:DATA[1][current()[not(b:DATA[2])]]/b:DATAVALUE"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
https://xsltfiddle.liberty-development.net/bFWRAp3
Но в целом вместо <xsl:for-each select="foo"><bar>...</bar></xsl:for-each>
вы, конечно, можете использовать <xsl:apply-templates select="foo"/>
с соответствующим <xsl:template match="foo"><bar>...</bar></xsl:template>
, если это ваш главный вопрос.