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

时间:2017-08-09 15:46:05

标签: xpath xidel

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

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应该是什么价值?

谢谢,

3 个答案:

答案 0 :(得分:2)

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

不确定这是否可以从命令行运行良好但是可以完成工作。

答案 1 :(得分:0)

要获取表格标题 t,如果标记//tr[1]/td用于标题(预期),则只获取第1个tr数据//tr[1]/thth

按列文字获取标题在该表上尝试此XPath:https://www.w3schools.com/css/tryit.asp?filename=trycss_table_border

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

逻辑是:使用td函数找到具有特定文本//tr/td[text()='Griffin']的{​​{1}}的位置。只需通过此职位找到count()

答案 2 :(得分:0)

您只能使用xpath来获取它:

//table//tr[1]/td[count(//table//td[text()='${cellValue}']/preceding-sibling::*) + number(boolean(//table//td[text()='${cellValue}']/preceding-sibling::*))]
  

注意:   指定包含现有值的单元格(例如'b3')会从标头('a3')中给出正确的单元格。   如果您尝试搜索无效的单元格值,则会收到正确的空值,因为标头中的单元格不存在。