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

问题描述:

我想把每个单元格的所有信息放在一行中的表格中。我需要弄清楚如何打印表格中每列的标题。如何使用XPath获取表格中的上述单元格?

td, table { 
 
    border: 2px black solid; 
 
}
<table> 
 
    <tr> 
 
    <td>a1</td> 
 
    <td>a2</td> 
 
    <td>a3</td> 
 
    <td>a4</td> 
 
    </tr> 
 
    <tr> 
 
    <td>b1</td> 
 
    <td>b2</td> 
 
    <td>b3</td> 
 
    <td>b4</td> 
 
    </tr> 
 
    <tr> 
 
    <td>c1</td> 
 
    <td>c2</td> 
 
    <td>c3</td> 
 
    <td>c4</td> 
 
    </tr> 
 
    <tr> 
 
    <td>d1</td> 
 
    <td>d2</td> 
 
    <td>d3</td> 
 
    <td>d4</td> 
 
    </tr> 
 
</table>

Table 1 
+----+----+----+----+ 
| a1 | a2 | a3 | a4 | 
+----+----+----+----+ 
| b1 | b2 | b3 | b4 | 
+----+----+----+----+ 
| c1 | c2 | c3 | c4 | 
+----+----+----+----+ 
| d1 | d2 | d3 | d4 | 
+----+----+----+----+ 

Table 2 
+----+----+----+----+ 
| e1 | e2 | e3 | e4 | 
+----+----+----+----+ 
| f1 | f2 | f3 | f4 | 
+----+----+----+----+ 
| g1 | g2 | g3 | g4 | 
+----+----+----+----+ 
| h1 | h2 | h3 | h4 | 
+----+----+----+----+ 

And Other Tables ... 

我想获得在塔的顶部印有细胞的细胞(即T R [1])。

输出应该不具有第一原始..

第一输出应为:

单元B1具有头A1

..

细胞G2具有标头e2

等等。

我使用xidel:

xidel $site -e "//tr[position()>1]/td/concat('The cell ', ., $codeX)"

$codeX值应该是什么?

感谢,

+0

如果你想使用第一行,那么听起来好像使用'// tr [1]/td'就是你想要的 –

+0

@MartinHonnen我想从第二行得到它,实际上我使用的是concat( )将它们一起打印。 – user37421

要得到表头TEX吨只得到第一个TR数据//tr[1]/td//tr[1]/th如果用于头(预计)

按列文本尝试获得头标记th此表上的XPath:https://www.w3schools.com/css/tryit.asp?filename=trycss_table_border

//th[count(//tr/td[text()='Griffin'])] 

逻辑是:找到的位置使用特定文本//tr/td[text()='Griffin'],通过使用count()函数。并找到th在这个位置

+0

我试图用'../../tr[1]/td[count(./preceding-sibling::td)]' 来做到这一点,它没有工作 – user37421

+0

你试过我的建议吗?因为你的定位器100%不正确 –

+0

我应该如何找到td元素内的文字?其实我有很多桌子和很多细胞,而且我的帖子也过于简化了。 – user37421

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]) 

不确定在命令行中该功能是否正常工作,但执行该任务。