I would design the XSLT more modular and then take it step by step:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:md1="http://services.test.com/schema/MainData/V1"
xmlns="http://services.test.com/schema/MainData/V1"
exclude-result-prefixes="md1">
<xsl:template match="/">
<xsl:apply-templates />
<xsl:template>
<xsl:template match="soap:Envelope">
<soap:Envelope>
<xsl:apply-templates />
</soap:Envelope>
</xsl:template>
<xsl:template match="soap:Body">
<soap:Body>
<xsl:apply-templates />
</soap:Body>
</xsl:template>
<xsl:template match="retrieveDataResponse">
<retrieveDataResponse>
<Response>
<xsl:value-of select="Response" />
</Response>
<xsl:if test="Response='The Data retrieved from the Database'">
<Id>
<xsl:value-of select="Id" />
</Id>
<Name>
<xsl:value-of select="Name" />
</Name>
<Age>
<xsl:value-of select="Age" />
</Age>
<Designation>
<xsl:value-of select="Designation" />
</Designation>
</xsl:if>
</retrieveDataResponse>
</xsl:template>
<xsl:template match="*">
<xsl:copy-of select="." />
</xsl:template>
</xsl:stylesheet>
A little verbose, but you get the idea. It doesn't do a lot of transformation. Typically you would strip off the envelope so processing becomes easier. if you want to suppress a specific element, you always can use <xsl:template match="prefix:element" />
this would suppress all output of such an element. Recommended reading.
Let us know how it goes!