You are making this __much__ more complicated than it need be:
<xsl:for-each select="mbody/p">
this says for each p child or mbody
<xsl:apply-templates select = "//p" />
apply templates to every p element anywhere in the document
(not just in this mbody)
then after that apply templates
<xsl:apply-templates select = "//b"/>
to every b element anywhere in the document.
when you do get to a p you do:
<xsl:template match = "p" >
<xsl:value-of select = "." />
</xsl:template>
which says do not apply templates to the children of p (such as that b
element) instead just make a string of all the character data, ignoring
any element nodes (which is what value-of is defined to do).
all you need is:
<xsl:template match = "/" >
<html>
<body>
<xsl:apply-templates select ="article/body/module/p"/>
</body>
</html>
</xsl:template>
<xsl:template match = "p" >
<p>
<xsl:apply-templates/>
</p>
</xsl:template>
<xsl:template match = "b" >
<b>
<xsl:apply-templates/>
</b>
</xsl:template>
________________________________________________________________________
This e-mail has been scanned for all viruses by Star. The
service is powered by MessageLabs. For more information on a proactive
anti-virus service working around the clock, around the globe, visit:
http://www.star.net.uk
________________________________________________________________________