如何使用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 ...

我想让单元格打印在列的顶部(即 tr[1](。

输出不应该有第一个原始的..

第一个输出应该是:

单元格 b1 的标题为 a1

..

单元格 g2 的标题为 e2

等等..

我正在使用 xidel:

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

$codeX的价值应该是什么?

谢谢

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"(给出正确的单元格。 如果您尝试搜索单元格的无效值,则由于标题中的单元格不存在,您会收到正确的空值。

要获取表头,text 只是获取 1st 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'])]

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

最新更新