Here is a complete, short and simple XSLT 2.0 solution:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:param name="pPeriod" select="'P60D'"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match=
"Data
[current-date()
-
xs:date(concat(substring(b,1,4),
'-',
substring(b,5,2),
'-',
substring(b,7)
)
)
gt xs:dayTimeDuration($pPeriod)
]"/>
</xsl:stylesheet>
When applied on this XML document:
<t>
<Data>
<a>something</a>
<b>20120601</b>
<c>something else</c>
</Data>
<Data>
<a>something</a>
<b>20120420</b>
<c>something else</c>
</Data>
<Data>
<a>something</a>
<b>20120301</b>
<c>something else</c>
</Data>
</t>
the wanted, correct result (last Data
element "deleted") is produced:
<t>
<Data>
<a>something</a>
<b>20120601</b>
<c>something else</c>
</Data>
<Data>
<a>something</a>
<b>20120420</b>
<c>something else</c>
</Data>
</t>