Если вы пытаетесь получить A где-нибудь в иерархии от корня, это работает (для xslt 1.0, а также 2.0, если он используется в xslt)
//descendant-or-self::node()[local-name(.) = 'a' and not(count(b))]
ИЛИ вы также можете сделать
//descendant-or-self::node()[local-name(.) = 'a' and not(b)]
ИЛИ также
//descendant-or-self::node()[local-name(.) = 'a' and not(child::b)]
В xslt нет способов добиться того же.
Примечание: XPaths чувствительны к регистру, поэтому, если имена ваших узлов отличаются (что, я уверен, никто не будет использовать A, B), тогда, пожалуйста, убедитесь, что регистр совпадает.