Это зависит от того, что вы хотите сделать. Вы можете выбрать все элементы <p/>
, которые содержат «Find me» в любом из их потомков, с помощью
//xhtml:p[contains(., 'Find me')]
Это вернет дубликаты, поэтому вы не будете указывать тип узлов, тогда он также вернет <body/>
и <html/>
.
Или, может быть, вам нужен любой узел, у которого есть дочерний (не потомковый) текстовый узел, содержащий «Найди меня»
//*[text()[contains(., 'Find me')]]
Этот не вернет <html/>
или <body/>
.
Я забыл упомянуть, что .
представляет все текстовое содержимое узла. text()
используется для извлечения [набора узлов] текстовых узлов. Проблема с вашим выражением contains(text(), 'Find me')
состоит в том, что contains()
работает только со строками, но не с наборами узлов, и поэтому он преобразует text()
в значение первого узла, поэтому удаление первого <br/>
заставляет его работать.