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]