XPath для вложенных элементов с текстом(), но без пробелов

У меня плохой XHTML мне нужно разбираться с xpath. Это выглядит так:

<div class="foo">
  i need this text
  <br/>
  <br/>
  <span>sometext</span>
</div>

<div class="foo">
  <span>some other text</span>
  <span>sometext</span>
</div>

Я хочу выбрать ВСЕ контент с "Мне нужен этот текст" в первом div. Моя проблема заключается в том, что элементы div содержат пробелы или другие элементы, так что //div [@class= "foo"]/text() возвращает также и пустые строки для второго div. Я хочу игнорировать эти пустые поля, как я могу это сделать?

Ответ 1

Использование:

//div
   [.//text()
        [normalize-space() = 'i need this text']
   ]
    //text()[normalize-space()]

Это выбирает любой дочерний объект текстового узла, не содержащий пробелов, любого div в документе, который (у div) имеет потомком текстового узла, нормализованным строковым значением которого является строка "i need this text".

Функция normalize-space() принимает строку (строковое значение контекстного узла - если аргумент не указан) и создает из него другую строку, в которой удаляются все символы верхнего и конечного пробелов, и любая внутренняя группа смежных пробелов символы заменяются одним пробелом.

Ответ 2

Попробуйте этот селектор:

//span[@class='glyphicon glyphicon-list mr5']/..[contains(normalize-space(text()),'Applications')]