Вы можете сделать это в XPath 1. Я предполагаю, что только один столбец имеет желаемый заголовок и атрибут rowspan не встречается.
tbody/tr/td[
count(preceding-sibling::td[not(@colspan)])
+ sum(preceding-sibling::td/@colspan)
= count(../../tr[1]/th[.='Pick Me']/preceding-sibling::th[not(@colspan)])
+ sum(../../tr[1]/th[.='Pick Me']/preceding-sibling::th/@colspan)]
Вышеприведенное выражение возвращает все ячейки , начиная с в крайнем левом столбце заголовка Pick Me.Дублируя большую часть логики, вы можете получить ячейки, начинающиеся с любого столбца, охватываемого Pick Me, или ячеек , разделяющих столбец с Pick Me, возможно, самой широкой интерпретацией вашего вопроса.:
tbody/tr/td[
count(preceding-sibling::td[not(@colspan)])
+ sum(preceding-sibling::td/@colspan)
< count(../../tr[1]/th[.='Pick Me']/preceding-sibling::th[not(@colspan)])
+ sum(../../tr[1]/th[.='Pick Me']/preceding-sibling::th/@colspan)
+ count(../../tr[1]/th[.='Pick Me'][not(@colspan)])
+ sum(../../tr[1]/th[.='Pick Me']/@colspan)
and count(preceding-sibling::td[not(@colspan)])
+ sum(preceding-sibling::td/@colspan)
+ not(@colspan)
+ sum(@colspan)
> count(../../tr[1]/th[.='Pick Me']/preceding-sibling::th[not(@colspan)])
+ sum(../../tr[1]/th[.='Pick Me']/preceding-sibling::th/@colspan)]
Стратегия здесь состоит в том, чтобы вычислить «позицию» как левой, так и правой стороны каждой ячейки и заголовок Pick Me, где «позиция» означает количество столбцов слева от чего-либо.Ячейка перекрывает столбец (столбцы) заголовка, если и только если слева от ячейки слева от заголовка, а справа от ячейки справа от левого заголовка.В этом смысл числовых сравнений.