Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » Как составить Xpath для повторяющихся блоков?

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

Alinalessio

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть такой код:

Код:
 
<div class="product">
    <div><a href="" class="ne-product"></a></div>
</div>
 
<div class="product">
    <div><a href="" class="product-card-decor"></a></div>
    <div><a href="" class="product-card-decor"></a></div>
</div>
 

 
Тут есть повторяющийся корневой див. Мне нужно последовательно добраться до

Код:
 
//div[@class="product"]/div[1]/a
//div[@class="product"]/div[2]/a
 

 
т.е. к каждой ссылке, которая внутри ВТОРОГО <div class="product">
 
Для меня трудность в том, что корневой блок не уникальный и ВТОРОЙ. Я не знаю как указать путь к нему.
Пытался так:
 
1.

Код:
 
//div[@class="product"][2]/div[1]/a
//div[@class="product"][2]/div[2]/a
 

 
2.

Код:
 
//a[@class="product-card-decor"]../div../div[@class="product"]/div[1]/a
//a[@class="product-card-decor"]../div../div[@class="product"]/div[2]/a
 

Во втором случае, я пытался оттолкнуться от уникальных классов и подняться к родительским блокам, а потом обратно спуститься к этим же ссылкам, чтобы получить их каждую по отдельности.
 
3.

Код:
 
//a[@class="product-card-decor"][1]
//a[@class="product-card-decor"][2]
 

 
Помогите пожалуйста. Как через Xpath найти последовательно найти каждый из почти уникальных объектов. Они уникальны только для всей страницы, но между собой они повторяются. Мне же нужно найти каждый a[@class="product-card-decor"] по отдельности.

Всего записей: 223 | Зарегистр. 21-06-2010 | Отправлено: 10:01 13-04-2021 | Исправлено: Alinalessio, 10:06 13-04-2021
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
//div[@class="product"][2]/div[1]/a
//div[@class="product"][2]/div[2]/a

ну, и не работает?

Всего записей: 15091 | Зарегистр. 20-09-2014 | Отправлено: 10:06 13-04-2021
Alinalessio

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В моём случае не работает. Но, возможно, стоит упомянуть, что речь о программе Datacol7  
Может в ней Xpath урезанный или там требуются какое-то экранирование?

Всего записей: 223 | Зарегистр. 21-06-2010 | Отправлено: 10:08 13-04-2021
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alinalessio

Цитата:
В моём случае не работает.

что именно не работает? одна строка - работает, а вам нужно за один раз выбрать сразу все?
//div[@class="product"][2]/div/a

Всего записей: 15091 | Зарегистр. 20-09-2014 | Отправлено: 10:12 13-04-2021 | Исправлено: Mavrikii, 10:15 13-04-2021
Alinalessio

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нет. Одну строку пытаюсь вытащить. Допустим эту:

Код:
 
//div[@class="product"][2]/div[2]/a
 

 
Нашёл проверочник Xpath https://www.freeformatter.com/xpath-tester.html
 
Дал ему этот код:

Код:
 
<div class="product">
    <div><a href="" class="ne-product"></a></div>
</div>
 
<div class="product">
    <div><a href="" class="product-card-decor">1</a></div>
    <div><a href="" class="product-card-decor">2</a></div>
</div>
 

 
И запросил Xpath:

Код:
 
//div[@class="product"][2]/div[1]/a
 

 
Он выдал ошибку:

Код:
Unable to perform XPath operation. The markup in the document following the root element must be well-formed.


Всего записей: 223 | Зарегистр. 21-06-2010 | Отправлено: 10:16 13-04-2021
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alinalessio

Цитата:
Нашёл проверочник Xpath

http://xpather.com/
 

Цитата:
Он выдал ошибку:


Цитата:
The markup in the document following the root element must be well-formed.

потому, что ему нужны
Цитата:
<root xmlns:foo="http://www.foo.org/" xmlns:bar="http://www.bar.org">...</root>

тестируйте на том, что по ссылке выше.
 

Код:
//div[@class="product"][2]/div/a

выберет вам все <a> второго элемента.
 
можно и так

Код:
//div[@class="product"][2]//a

Всего записей: 15091 | Зарегистр. 20-09-2014 | Отправлено: 10:18 13-04-2021 | Исправлено: Mavrikii, 10:20 13-04-2021
Alinalessio

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо за ссылку! Это не просто проверка выражений, но ещё и генератор! Спасибо. С его помощью всё разрешилось!
 
Для тех, кто столкнулся с тем, что вроде работающее выражение не работает, попробуйте двойные кавычки заменить на одинарные. Мне помогло. Благодаря этому генератору выражений.

Всего записей: 223 | Зарегистр. 21-06-2010 | Отправлено: 10:28 13-04-2021
Fenrizz



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alinalessio

Цитата:
Для меня трудность в том, что корневой блок не уникальный и ВТОРОЙ. Я не знаю как указать путь к нему.  Пытался так:  

По определению в XML может быть только один корневой элемент, поэтому ваш XML не является валидным.

Всего записей: 677 | Зарегистр. 12-09-2017 | Отправлено: 12:15 14-04-2021
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Интернет » Web-программирование » Как составить Xpath для повторяющихся блоков?


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru