如何使用XPath在表中获取上面的单元格?

如何使用XPath在表中获取上面的单元格?,xpath,xidel,Xpath,Xidel,我试图把每个单元格的所有信息放在一行表格中。我需要弄清楚如何打印表中每列的标题 td,表{ 边框:2个黑色实心; } a1 a2 a3 a4 b1 b2 b3 b4 c1 c2 c3 补体第四成份 d1 d2 d3 d4 要获取表格标题tex请不要仅获取第一个tr数据//tr[1]/td或//tr[1]/th如果标签th用于标题(这是预期的) 若要按列文本获取标题,请在该表上尝试以下XPath: 逻辑是:使用count()函数,使用特定文本//tr/td[text()='Griffin']查

我试图把每个单元格的所有信息放在一行表格中。我需要弄清楚如何打印表中每列的标题

td,表{
边框:2个黑色实心;
}

a1
a2
a3
a4
b1
b2
b3
b4
c1
c2
c3
补体第四成份
d1
d2
d3
d4

要获取表格标题tex请不要仅获取第一个tr数据
//tr[1]/td
//tr[1]/th
如果标签
th
用于标题(这是预期的)

若要按列文本获取标题,请在该表上尝试以下XPath:


逻辑是:使用
count()
函数,使用特定文本
//tr/td[text()='Griffin']
查找
td
的位置。只需按此位置查找
th

Xidel支持XQuery 3.0,因此对于构建任务,我建议如下:

let $rows := //tr,
    $header-cells := $rows[1]/td
for $data-row in $rows[position() gt 1]
for $cell at $pos in $data-row/td
return $cell!('cell ' || . || ' has header ' || $header-cells[$pos])

不确定这在命令行中是否正常工作,但可以完成任务。

您可以仅使用xpath来获取它:

//table//tr[1]/td[count(//table//td[text()='${cellValue}']/preceding-sibling::*) + number(boolean(//table//td[text()='${cellValue}']/preceding-sibling::*))]
注: 指定包含现有值的单元格(例如“b3”)将从标题(“a3”)中获得正确的单元格。 如果您试图搜索单元格的无效值,则会收到正确的空值,因为标头中的单元格不存在


如果您想使用第一行,那么听起来好像您正在使用
//tr[1]/td
want@MartinHonnen我想从第二行获取它,实际上我正在使用concat()将它们一起打印。我尝试使用“../../tr[1]/td[count(./previous sibling::td)]”执行此操作,但没有效果。您尝试过我的建议吗?由于您的定位器100%不正确,我应该如何查找td元素中的文本?事实上,我有很多表格和单元格,而且我的帖子过于简化。事实上,我已经修改了我的问题。我希望它更容易理解。非常感谢您的帮助。请在th标记或td中添加表格html、标题?这可以做得更简单:
for$row in//tr[position()>1]for$cell at$i in$row/td return concat('cell','has header',//tr[1]/td[$i])
//table//tr[1]/td[count(//table//td[text()='${cellValue}']/preceding-sibling::*) + number(boolean(//table//td[text()='${cellValue}']/preceding-sibling::*))]