Условие not (потомок :: блог) исключает любой узел, у которого есть потомок с именем "блог".
Так что если у вас есть:
<blog id="1">
<test id="1.1">
<blog id="1.1.1" />
</test>
</blog>
<blog id="2">
<test id="2.1" />
</blog>
Это исключит и , поскольку оба этих узла имеют в качестве потомка.
Но это не исключает или , поскольку у них нет потомков с именем "blog"
Также обратите внимание, что ваш выбор потомка :: * [не (потомок :: блог)] будет выводить дважды: один раз внутри и еще раз сам .
Для полного решения, предложенное Эваном Ленцем (преобразование идентичности с пустым переопределяющим шаблоном для узлов "блога"), вероятно, это то, что дает желаемый результат.