LINUX.ORG.RU

XPath: помогите описать путь

 ,


0

1

Хочу находить список объектов вида

<td>Сообщение:</td><td>(.*?)</td>

В смысле, нужно то, что в скобках.

Помогите написать правило XPath. Или хоть намекните, куда смотреть, чтобы на соседние ветки условие накладывать.

★★★★★

Все (2) реализии xpath для CL умеют добавлять функции в xpath. Добавь туда RE и радуйся. Конкретно такую регулярку можно заменить несколькоми стандартными строковыми функциями из xpath. Возьми стандарт или тематическую книжку.

antares0 ★★★★
()

Отбор соседних веток по моему ось sublig-ов

antares0 ★★★★
()

Не знаю может он ли в position.

td[position() mod 2 = 0]
И правильно ли я понял вопрос.

anonymous
()
//td[preceding::td[text()='Сообщение:']]/text()

Имхо, xpath намного очевиднее регулярок.

anonymous
()
Ответ на: комментарий от anonymous

Только preceding-sibling, конечно. Поторопился.

anonymous
()
Ответ на: комментарий от anonymous

//td[preceding::td[text()='Сообщение:']]/text()

Спасибо, похоже на правду. preceding::td ищет «предыдущий td в данном узле» или «предыдущая ветка в данном узле, при условии, что она — td» ?

Имхо, xpath намного очевиднее регулярок.

Кто к чему привык.

monk ★★★★★
() автор топика
Ответ на: комментарий от monk

preceding::td ищет любой (выше по документу) td перед текущим узлом.

Я потом исправился, нужно preceding-sibling. Кстати, можно и как antares:

//td[.='Сообщение:']/following-sibling::td
anonymous
()
Ответ на: комментарий от anonymous

Не получается

<td>Сообщение:</td><td>a</td><td>Сообщение:</td><td>b</td>

Возвращает: a, Сообщение:, b

Должно быть: a, b

monk ★★★★★
() автор топика
Последнее исправление: monk (всего исправлений: 1)
Ответ на: комментарий от monk

Можно в XPath сказать «предыдущий элемент td в данном узле»? А не список всех предыдущих.

monk ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.