Найдите интересующий вас заголовок и вытащите его таблицу.
//u[b = 'Header1']/ancestor::table[1]
или
//td[not(.//table) and .//b = 'Header1']/ancestor::table[1]
Обратите внимание, что //
всегда начинается с корня документа (!). Вы не можете сделать:
//table[//*[contains(text(), "Header1")]]
и ожидайте, что внутренний предикат (//*…
) волшебным образом начнется в правильном контексте. Используйте .//
, чтобы начать с узла контекста. Уже тогда это:
//table[.//*[contains(text(), "Header1")]]
не будет работать, поскольку даже самая внешняя таблица содержит текст 'Header1'
где-то глубоко внизу, поэтому предикат оценивается как true для каждой таблицы в вашем примере. Используйте not()
, как я, чтобы убедиться, что никакие другие таблицы не являются вложенными.
Кроме того, не проверяйте условие на каждом узле .//*
, так как это не может быть правдой для каждого узла с самого начала. Более эффективно быть конкретным.