Нужно составить xPath, в зависимости от содержимого родительских узлов, как?
Вот код
<div> <div> <div>Аркадий<div> <div> <h2>ЗП</h2> <div>100 000</div> <div>+ 50 000</div> <!-- (искомый div) --> <div>+ 10 000</div> </div> </div> <div> <div>Анатолий<div> <div> <h2>ЗП</h2> <div>100 000</div> <div>+ 50 000</div> <div>+ 10 000</div> </div> </div> <div> <div>Василий<div> <div> <h2>ЗП</h2> <div>100 000</div> <div>+ 50 000</div> <div>+ 10 000</div> </div> </div> </div> |
<div> <div> <div>Аркадий<div> <div> <h2>ЗП</h2> <div>100 000</div> <div>+ 50 000</div> <!-- (искомый div) --> <div>+ 10 000</div> </div> </div> <div> <div>Анатолий<div> <div> <h2>ЗП</h2> <div>100 000</div> <div>+ 50 000</div> <div>+ 10 000</div> </div> </div> <div> <div>Василий<div> <div> <h2>ЗП</h2> <div>100 000</div> <div>+ 50 000</div> <div>+ 10 000</div> </div> </div> </div>
Мне нужно с помощью xPath найти этот тег
<div>+ 50 000</div>
именно в блоке Аркадия. Проблема в том, что во всех блоках это содержимое (+ 50 000) одинаково, но мне его надо найти именно в блоке с именем Аркадий
Очень прошу помощи, спасибо =)
Дополнительно:
//div[contains(text(),'Аркадий')]/following-sibling::div//div[contains(text(),'+ 50 000')] |
//div[contains(text(),'Аркадий')]/following-sibling::div//div[contains(text(),'+ 50 000')]
- Спасибо!
но вот тут сделал тест - https://codebeautify.org/Xpath-Tester
и он совпадений не нашёл
- Matsun, проверяйте там, где будете исполнять свой xpath (php, python, etc..). Тестеры эти онлайн через один работают. Например, вот тут https://xpath.curiousconcept.com/ всё работает без проблем.
- Понял, спасибО!
- Извините за надоедливость =) но как изменится xPath, если в вёрстку добавится h1:
<div> <div> <h1>Аркадий</h1> </div> <div> <h2>ЗП</h2> <div>100 000</div> <div>+ 50 000</div> <!-- (искомый div) --> <div>+ 10 000</div> </div> </div>
<div> <div> <h1>Аркадий</h1> </div> <div> <h2>ЗП</h2> <div>100 000</div> <div>+ 50 000</div> <!-- (искомый div) --> <div>+ 10 000</div> </div> </div>
- Matsun, вот так можно
//div[h1[contains(text(),'Аркадий')]]/following-sibling::div//div[contains(text(),'+ 50 000')]//div[h1[contains(text(),'Аркадий')]]/following-sibling::div//div[contains(text(),'+ 50 000')]
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос

Для составления XPath выражения, зависящего от содержимого родительских узлов, можно использовать различные особенности XPath, такие как функции, операторы и условия. Вот несколько примеров:
1. Использование функции `parent::node()` для обращения к родительскому узлу:
//div[@class='parent']/parent::node()/child::span//div[@class='parent']/parent::node()/child::span
2. Использование условия `contains()` для проверки содержимого родительского узла:
//div[contains(@class, 'parent')]/child::span//div[contains(@class, 'parent')]/child::span
3. Использование оператора `and` для комбинирования условий:
//div[@class='parent' and contains(text(), 'content')]/child::span//div[@class='parent' and contains(text(), 'content')]/child::span
4. Использование переменных для хранения содержимого родительского узла и последующего обращения к ним:
$x = "content"; //div[@class='parent' and contains(text(), $x)]/child::span
Это лишь некоторые примеры того, как можно составлять XPath выражения, зависящие от содержимого родительских узлов. В зависимости от конкретной структуры и содержания HTML документа, вам может потребоваться экспериментировать с различными методами и комбинациями, чтобы добиться нужного результата. Надеюсь, это поможет вам решить вашу проблему!