Два условия XPATH

Поддержка
  • @stell1 раз он собирает их значит они подходят под ваше выражение, задайте еще условий или как написал выше @Fox покажите ее. Раз он собирает значит оно подходит это все что можно сказать

  • @Fox
    Это и есть код всей страницы точней той части из которой я вытягиваю значения кидал в шапке темы.

    <div class="chat-online-users">
    <a href="#" onclick="chatWithMe(this); return false;" data-id="31783182" data-age="40" data-username="chitchat" data-city="Bács-Kiskun" data-country="Hungary" data-sexe="male" data-favorite="" class="topadclick list-group-item homme">
    <table style="width: 100%;">
    <tbody><tr>
    </tbody></table>
    </a>
    <a href="#" onclick="chatWithMe(this); return false;" data-id="32829557" data-age="27" data-username="Batman_5" data-city="Chandigarh" data-country="India" data-sexe="male" data-favorite="" class="topadclick list-group-item homme">
    <table style="width: 100%;">
    <tbody><tr>
    

    Дальше там всё дублируется ничего нового нет поэтому не видел смысла кидать больше


    Вот сделал тестовый скрипт с этой ошибкой в нём уже весь кусок страницы засунул в переменную. xpath.xml Как видите в первом варианте он нашёл из этого кода айдишники, а во втором судя по тому что их стало меньше он тоже нашёл правильно и исключил Индийские, но только он не вывел это а пустые строки добавил
    alt text

  • @stell1 said in Два условия XPATH:

    Дальше там всё дублируется ничего нового нет поэтому не видел смысла кидать больше

    Вы применяете xpath только к этому куску кода или ко всей странице?

  • @Fox Только к этому на самом сайте блок с юзерами отдельно как бы идёт. И я Действием "Получить код элемента" беру SAVED_XML

  • @stell1 said in Два условия XPATH:

    @Fox Только к этому на самом сайте блок с юзерами отдельно как бы идёт. И я Действием "Получить код элемента" беру SAVED_XML

    Непонятно зачем вам логическое "И" в выражении? Достаточно использовать функцию not().
    Можете использовать вот такой xpath:

    //*[contains(@class,'chat-online-users') ]/a[not(contains(@data-country, 'India'))]/@data-id
    

    85a71c16-0abc-4160-aab8-7416e1204a6d-изображение.png

    xpath 2.xml

  • @Fox Но я изначально и спрашивал как составить, потому что вообще ноль в xpath, просто в каком-то примере тут на форуме видел что пишут and not так и скопировал. Спасибо в любом случае за помощь

  • @Fox @data-id по этому, в первом вопросе этот ключ был.

  • @stell1 А вы не списком их получаете?

  • @lotra Юзеров на сайте? Нет, получаю вот код элемента, а дальше уже через Xpath вытягиваю нужные значения в список. Я раньше с помощью регулярок это всё делал сам, но говорят что через xpath быстрее и меньше потоки грузит

  • @stell1 Вы можете сначала их получить как количество. а потом по списку в цикле собрать,
    Есть экшен который получает количество элементов по текущему запросу xpath получаете сколько и в цикле берете их пример
    xpath на количество стандартный //*[contains(@class,'chat-online-users') ]/a[@data-id and not(contains(@data-country, 'India'))] Или какой у вас там теперь.
    затем в цикле вы знаете сколько их из переменной CYCLE_INDEX она автоматически появляется составляете выражение и подставляете его для получения вот так если выражение тоже
    "//*[contains(@class,'chat-online-users') ]/a[" +(CYCLE_INDEX +1) + "][@data-id and not(contains(@data-country, 'India'))]"
    Это если ваш цикл начинается от 0 если от единицы как по умолчанию в басе "//*[contains(@class,'chat-online-users') ]/a[" +(CYCLE_INDEX) + "][@data-id and not(contains(@data-country, 'India'))]"
    объявляете это выражение как переменную и в экшене пишете не выражение а переменную оборачивая ее в [[]] Бас понимает переменные в этих экшенах. Если это в браузере а не в кубике xpath то не забывайте подставить впереди ">XPATH> "
    каждый xpath-xml будет 1 строкой с 1 значением по запросу ее проверяете на валидность и уже если нужно вставляете в ваш список

  • @lotra said in Два условия XPATH:

    @Fox @data-id по этому, в первом вопросе этот ключ был.

    чегось?

  • @Fox

    @Fox said in Два условия XPATH:

    Непонятно зачем вам логическое "И" в выражении? Достаточно использовать функцию not().
    Можете использовать вот такой xpath:

    @stell1 said in Два условия XPATH:

    Достаю от туда через XPATH все айдишники так

    //*[contains(@class,'chat-online-users')]/a/@data-id
    

    Но мне нужны не все, а исключить те айдишники где data-country="India"

    Типо так

    and not(contains(@data-country, 'India')
    

    Пытался встроить по другим примерам, но так и не понял как правильно можно объединить эти условия

    Я и объединил их как в вопросе. поэтому там and()

  • @lotra said in Два условия XPATH:

    Я и объединил их как в вопросе. поэтому там and()

    Ммм, понятно. Смотрите, действия "Xpath получить текст" и "Xpath получить каждый текст" просто выполняют функцию text() для элемента. В разметке пользователя у целевого элемента текста нет (только перенос строки из текста разметки), по этому и действие "Xpath получить каждый текст" возвращало пустые значения. Нужно либо использовать действие "Xpath получить каждый xml" для получения всего кода элемента, либо уточнить целевой атрибут в запросе:

    //*[contains(@class,'chat-online-users') ]/a[@data-id and not(contains(@data-country, 'India'))]/@data-id