According to validation error,
…ellpadding="0" cellspacing="0"></table></td><td valign="top" width="144"><tabl…
for some cases there are no items that match for-each criteria:
<xsl:for-each select="country[price='0.5p']" xmlns:xsl="#unknown"></xsl:for-each>
in a result you are generating empty table tag without any contents inside.
<table width="140" cellpadding="0" cellspacing="0">
</table>
and this is what we actually see in validation error.
Consider neither using xsl:if to filter this, or just adding empty row outside of xsl:for-each.