(Решение найдено!)
Рассмотрим следующую html-структуру (упрощенно со страницы , с которой я борюсь).
<html>
<body>
<div class=page>
<ol class="xoxo first">
<li class="selection-line>
Item 1
<li class="selection-line>
Item 2
<ol class="xoxo">
<li class="selection-line>
Item 3
<li class="selection-line>
Item 4
</div>
</body>
</html>
Мне нужно выбрать пункты 1 и 2, но не 3 и 4.
После прочтения этого поста я проверил код и обнаружил глупую ошибку. Это работает сейчас, но я тем не менее отправлю сообщение, если у кого-то есть такой же вопрос.
Решение:
//*[contains(concat( " ", @class, " " ), concat( " ", "section-line", " " )) and not(ancestor::*[@class = 'xoxo'])]