Как написать условный выбор xpath для определенных узлов?

Итак, у меня есть пользовательский скрипт, добавленный в хром, автопейджер.

в настоящее время я использую

//div[@class=\'entry-content\']/p[contains(.,\'chapter\') or contains(.,\'Chapter\') or preceding-sibling::p[contains(.,\'Chapter\')] and (following-sibling::p[contains(.,\'Translator Ramblings\')] or following-sibling::p[contains(.,\'Translating Ramblings\')] or following-sibling::p[contains(.,\'Ramblings\')] or following-sibling::p[starts-with(.,\'Translator\')] or following-sibling::p[starts-with(.,\'Translating\')])] 

Мне нужен условный аргумент, где, когда приведенный выше код ничего не разрешает, он выберет

//h3[contains(.,\'Share this\')]

Вместо. Я хочу, чтобы h3 был выбран только в этом случае. Я не могу понять, как написать это в xpath, я просмотрел другие связанные вопросы, и они не решают эту проблему. Если я не могу решить это с помощью xpath, как мне решить это с помощью javascript? Я использую жирную обезьяну на хроме.


person skaviouz    schedule 18.04.2017    source источник


Ответы (1)


По сути, шаблон для достижения того, что вы объяснили, используя чистый XPath 1.0, может быть следующим:

expression1 | expression2[not(expression1)]

Итак, в контексте вашего вопроса:

  • выражение1 (усеченное): //div[@class=\'entry-content\']/p[...]
  • выражение2: //h3[contains(.,\'Share this\')]
  • решение:

    //div[@class=\'entry-content\']/p[...]  | 
      //h3[contains(.,\'Share this\')]
          [not(//div[@class=\'entry-content\']/p[...])]
    

Это могло бы быть намного чище, если бы было реализовано с помощью Javascript. Просто выполните выражение1, и если результат имеет длину 0, выполните выражение2.

person har07    schedule 19.04.2017
comment
Спасибо :) Сначала я попытался скопировать пример XOR, но это было не совсем то, что я искал; особенно когда второе выражение всегда будет истинным. Я знаю, что могу отредактировать javascript и добавить еще одно поле. Однако я чувствовал, что просто отредактировать xpath будет нормально. Если в будущем я закончу с более сложными выражениями xpath, я мог бы подумать о переписывании всего плагина для жирных обезьян, лол. Основная причина сохранения 100% xpath заключается в том, что у меня есть средство проверки xpath (называемое помощником xpath, но это средство проверки?), и оно упростит отладку, чтобы проверить, где возникают проблемы. - person skaviouz; 19.04.2017