Этот XPath,
//p[not(a) or node()[not(self::a)]]
выберет все p
элементы, которые не имеют a
child или , имеют дочерние узлы, которые не являются a
s, что эквивалентно выбор p
элементов, которые имеют не только a
дочерние элементы ,
<p>case a</p>
<p>case <a>b</a></p>
по запросу.