2011-04-14 94 views
2
查找欄的頂部

說一個HTML表看起來像這樣:使用XPath

<tr> <td>  </td> <th> black </th> <th> white </th> </tr> 
<tr> <th> 1st </th> <td> stuff </td> <td> stuff </td> </tr> 
<tr> <th> 2nd </th> <td> earth </td> <td> stuff </td> </tr> 
<tr> <th> 3rd </th> <td> stuff </td> <td> bingo </td> </tr> 

也說我發現使用XPath,或許與標有「賓果」的表格單元格:

@cell = @table.xpath('.//td[contains(text(), "bingo")]') 

(這是你如何與引入nokogiri做到這一點。)

那麼什麼是採取@cell,並用它來查找頂部包含此單元格的列標題中的典型方式是什麼?

也就是說,將「賓果」變成「白色」和「地球」變成「黑色」的標準方式是什麼?

+0

請注意,這將是更容易,也是語義更好的標記,如果你使用了''圍繞第一行。 (假設你可以控制標記。) – Phrogz 2011-04-22 02:53:10

回答

4

對於normalizated表,從任何tdth「細胞」這個相關的XPath表達式:

preceding::*[ 
    self::td|self::th 
][ 
    position() mod count(../*) = 0 
][ 
    last() 
] 
+0

我不明白'position()mod count(../*)= 0'如何找到正確的列。 – LumpN 2011-04-14 17:52:14

+0

@LumpN:對於一個R x C標準化表,任何單元與其對應單元之間的距離爲C x N。 C會被計數(../*),因爲它是一個標準化的表格。 'position()'是'在前面'軸**中的距離**。你有它。 – 2011-04-14 18:10:02

+0

謝謝亞歷杭德羅。正常化意味着什麼? – 2011-04-14 21:36:18