Xpath для получения данных до 2 <br> тегов

Мне нужно извлечь текст, который идет до 2 <br> теги, то есть text 3, Код похож на следующее:

<div>
    <br>
    text1
    <br>
    text2
    <br>
    text3
    <br>
    <br>
    text4
    <br>
</div>

Я старался //div/text()[preceding-sibling::br], но он извлекает все тексты.

1 ответ

Решение

Нахождение 2 подряд <br>s в этом сценарии оказывается сложнее, чем я ожидал, потому что пустой текстовый узел (те, которые состоят только из пробелов) здесь нужно игнорировать. Это один из способов:

/br[
    following-sibling::node()[self::*|self::text()[normalize-space()]
  ][1][self::br]]

Первый предикат находит следующий узел-брат, тип которого является либо элементом-узлом (self::*) или непустой текстовый узел (self::text()[normalize-space()]). затем [1] занимает только первый найденный узел, и, наконец, [self::br] подтверждает, что один найденный узел <br>,

Полное выражение XPath будет выглядеть следующим образом:

//div
 /br[
    following-sibling::node()[self::*|self::text()[normalize-space()]
  ][1][self::br]]
 /preceding-sibling::text()[1]
Другие вопросы по тегам