2014-11-29 6 views

ответ

8

Заменить text() с string():

//div[contains(string(), "Elangovan")] 

Или, вы можете проверить, что span «s следующим текстом собрата содержит текст:

//div[contains(span/following-sibling::text(), "Elangovan")] 

Смотрите также:

+0

Большое спасибо за вас alecxe. –

5

В качестве альтернативы alecxe это правильный ответ (+1), следующие несколько проще и несколько более идиоматических XPath будет работать точно так же:

//div[contains(., "Elangovan")] 

Причина того, что ваш оригинальный XPath с text() не работают,, что text() выберет все дочерние элементы текстового узла div. Однако ожидает строку в своем первом аргументе, а при заданном узле набора текстовых узлов использует только первый. Здесь первый текстовый узел содержит пробелы, а не искомую строку, поэтому тест не выполняется. При неявном . или явном первом аргументе string() все потомки текстовых узлов объединены вместе перед выполнением теста , поэтому тест проходит.

+1

plus один, очень подробная информация! – alecxe

1

Чтобы сделать @ kjhughes уже хороший ответ только немного более точным, то, что вы на самом деле просят это способ искать подстроки в div «s string-value:

Для каждого типа узла, существует способ определения строкового значения для узла этого типа. Для некоторых типов узлов строковое значение - это часть узла; для других типов узлов строковое значение - , вычисленное из строкового значения узлов-потомков.

Оба узел контекста (. или сам div) и множество узлов, возвращаемых text() - или любой другой аргумент! - сначала преобразуются в строки при передаче contains. Просто они преобразуются по-разному, потому что один относится к одному элементу, а другой относится к набору узлов.

Строковое значение одного элемента представляет собой конкатенацию строковых значений всех его потомков текстовых узлов. С другой стороны, строковое значение набора узлов является строковым значением узла в наборе, который является первым в порядке документа.

Таким образом, реальная разница заключается в том, что вы конвертируете в строку и как это преобразование происходит.

+0

Ссылка на строку и объяснение, предоставленные @lwburk, являются ценным вкладом и заслуживают понимания. +1 – kjhughes

Смежные вопросы