If i apply the following xslt
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes"/>
<xsl:template match="*">
<xsl:copy><xsl:apply-templates/></xsl:copy>
</xsl:template>
<xsl:template match="b/*">
<xsl:copy><xsl:apply-templates/></xsl:copy>
</xsl:template>
<xsl:template match="text()">text</xsl:template>
</xsl:stylesheet>
on the following xml
<?xml version="1.0"?>
<a>
<b></b>
</a>
the output is
<a>
text
<b></b>
text
</a>
What i don't get: All the empty text-nodes between the elements get processed except the empty text-node inside the element b. I don't see any difference on how the child elements of a and b are processed.