<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="input">
<xsl:variable name="other" select="../input[change=0 and unit=current()/unit]"/>
<xsl:if test="$other">
<match>
<unit>
<xsl:value-of select="unit"/>
</unit>
<xsl:for-each select="*[name() != 'change']">
<xsl:variable name="name" select="name()"/>
<xsl:variable name="original" select="$other/*[name() = $name]"/>
<xsl:if test="not(current() = $original)">
<value>
<xsl:attribute name="name">
<xsl:value-of select="$name"/>
</xsl:attribute>
<two>
<xsl:value-of select="current()"/>
</two>
<zero>
<xsl:value-of select="$original"/>
</zero>
</value>
</xsl:if>
</xsl:for-each>
</match>
</xsl:if>
</xsl:template>
<xsl:template match="/Source">
<xsl:apply-templates select="input[change=2]"/>
</xsl:template>
</xsl:stylesheet>
возвращает
<match>
<unit>
Wilmot IC 5
</unit>
<value name="plant">
<two>
YYYYY
</two>
<zero>
XXXXX
</zero>
</value>
<value name="group">
<two>
Georgia Power Co
</two>
<zero>
Detroit Edison Co
</zero>
</value>
</match>
, что похоже на то, что вы ищете.