Все зависит от вашей сущности. * Определено 1001 *, при условии, что оно определено как  
. Вы можете выбрать элементы p
, не содержащие полностью пробел и этот символ неразрывного пробела с p[not(matches(., '^[\s ]*$'))]
.
На https://xsltfiddle.liberty -development.net / 94hvTz6 вы можете видеть, что предлагаемый предикат исключает элементы p
только с пробелом и эту неразрывную пробелную ссылку на объект,Например, просто делает
<xsl:template match="/">
<xsl:copy-of select="//p[not(matches(., '^[\s ]*$'))]"/>
</xsl:template>
на ваших данных выборки, и в результате получается
<p class="text">
<br/><b>Header 2</b>
</p><p class="text">
Lorem ipsum.
</p><p class="text">
More lorem ipsum.
</p><p class="text" align="center">Header 3</p>
Если вы проверите https://xsltfiddle.liberty -development.net / 94hvTz6 / 2 , тоВы можете видеть, что выбор или исключение XPath работает с вашим отредактированным образцом и объявленной сущностью, очевидно, если вы включите полный DTD XHTML, который помещает элементы в пространство имен XHTML, тогда необходимо отрегулировать XSLT, чтобы учитывать пространство имен с помощью
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xpath-default-namespace="http://www.w3.org/1999/xhtml"
version="3.0">
<xsl:template match="/">
<xsl:copy-of select="//p[not(matches(., '^[\s ]*$'))]"/>
</xsl:template>
</xsl:stylesheet>
или, как сказано в комментарии, использование *:p
.
xsltfiddle не будет работать с XML и DTD, поэтому вы не можете проверить его там, новнутри oXygen или с Saxon из командной строки предложение должно сработать.