Во-первых, всякий раз, когда у вас смешанный контент (текст и разметка), лучше сравнивать строковое значение элементов, чем текстовые узлы, потому что встроенная разметка может разбивать сравниваемый текст на разные текстовые узлы.
Во-вторых, вы можете использовать:
//tr[td='Analyst']/@class
Примечание : сравнение наборов узлов является экзистенциальным сравнением. Это означает, что вы спрашиваете, существует ли какой-либо узел (в данном случае элемент td
) со строковым значением, равным 'Analyst'
.
Конечно, в HTML есть элементы, для которых пробел не имеет значения для рендеринга (он не сохраняется), несмотря на его присутствие в исходном документе. В этом случае вы можете использовать это простое выражение XPath 1.0 :
//tr[td[normalize-space()='Analyst']]/@class
Заметьте : набор узлов имеет ложное логическое значение тогда и только тогда, когда он пуст; вы можете «вкладывать» предикаты (правильно предикатом может быть любое выражение XPath).