XPath с конкретным случаем - PullRequest
       3

XPath с конкретным случаем

0 голосов
/ 09 октября 2018

У меня есть структура, которая выглядит примерно так

<p>
   <br>
       <b>Text to fetch </b>
   <br>
       "Some random text"
       <b>Text not to fetch</b>

Мне нужен XPath, который позволит мне извлекать следующий элемент одного и того же элемента br , только если между * 1006 нет текста* br элемент и его следующий брат и сестра.

Если я сделаю что-то вроде этого

//br/following-sibling::b/text()[1]

Он будет извлекать и Text to fetch, и Text not to fetch, а мне нужно только Text to fetch.

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Другой возможный XPath:

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

краткое объяснение:

  • //br/following-sibling::node(): найти все узлы, которые следуют за элементом br, где узлы..
  • [normalize-space()]: не пусто (только пробел), затем ..
  • [1]: для каждого найденного br взять только первый из таких узлов, затем ..
  • [self::b]: проверить, является ли узел элементом b, затем, если это элемент b ..
  • /text(): вернуть текстовый узел, который является дочерним элементомb элемент
0 голосов
/ 09 октября 2018

Попробуйте ниже XPath, чтобы избежать совпадения b узлов с предыдущим родным текстом:

//br/following-sibling::b[not(preceding-sibling::text()[1][normalize-space()])]/text()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...