Есть страница, на ней много div-ов, они все на одном уровне вложенности, sibling-и. Мне нужно выбрать группу элементов, которые находятся между двумя обязательно находящимися на странице div-ами (я эти div-ы нахожу по их текстовому содержимому). Группа элементов между двумя граничными div-ами может содержать произвольное количество div-ов, от 4 до 12 у меня.
Я написал такой XPath запрос, и он работает. В упрощённом виде выглядит так:
$x("//div[text() = 'MAYAK_START']/following-sibling::div[position() <= ( count(//div[text() = 'MAYAK_END']/preceding-sibling::*) - count(//div[text() = 'MAYAK_START']/preceding-sibling::*) ) ]")
здесь div-ы с текстом MAYAK_START и MAYAK_END это 2 граничных элемента (“маячки”). Я считаю количество элементов перед концом группы, отнимаю от него количество элементов перед началом группы и получаю количество элементов в группе. Потом отсчитываю от начала группы это количество элементов, и выбираю их.
Подскажите пожалуйста, насколько это приемлемый подход? Есть ли какие-то более подходящие альтернативы?
Можно было бы выбрать все элементы от начального и до конца, перебирать их в коде и остановиться тогда, когда попадётся элемент с тектсом хвостового элемента, но мне такой вариант кажется ещё более громоздким чем XPath предложенный выше.