The approach to this problem is:
(a) in the root template, apply-templates to the highest-level DfX element
(b) in the template with match="Dfx", apply-templates to the "logical children" of this Dfx element.
In your case, the highest-level element is the one numbered 1.0, and the logical children of an element are the ones whose number (a) starts with the parent's number, and (b) is one digit longer than the parent's number, ignoring any trailing "0" in the parent's number.
In 2.0 that looks like
<xsl:template match="Dfx">
<xsl:variable name="num" select="replace(., '0$', '')"
<Dfx>
<xsl:apply-templates select="../Dfx[
string-length(.) = string-length($num + 1) and
starts-with(., $num)"/>
</Dfx>
</xsl:template>
In 1.0 you have to replace the "replace" function with something involving substring().
Michael Kay
http://www.saxonica.com/
Author, XSLT Programmer's Reference and XPath 2.0 Programmer's Reference