2013-08-20 90 views
3

假設我有多個<tbody>,這we know is perfectly legal HTML一個HTML表格,並嘗試與readHTMLTable讀它如下:使用readHTMLTable多個TBODY

require(XML) 
table.text <- '<table> 
    <thead> 
    <tr><th>Col1</th><th>Col2</th> 
    </thead> 
    <tbody> 
    <tr><td>1a</td><td>2a</td></tr> 
    </tbody> 
    <tbody> 
    <tr><td>1b</td><td>2b</td></tr> 
    </tbody> 
</table>' 
readHTMLTable(table.text) 

輸出我得到的只需要第一<tbody>元素:

$`NULL` 
    Col1 Col2 
1 1a 2a 

忽略其餘。這是預期的行爲? (我在文檔中找不到任何提及。)和什麼是訪問整個表的最靈活和最可靠的方式?

我目前使用

table.text <- gsub('</tbody>[[:space:]]*<tbody>', '', table.text) 
readHTMLTable(table.text) 

這使我直接使用readHTMLTable一個URL來獲得這樣的表,也不會覺得很穩健。

回答

0

如果你看看源readHTMLTablegetMethod(readHTMLTable, "XMLInternalElementNode")它包含因此被特意設計只選擇第一TBODY的內容的行

if (length(tbody)) 
     node = tbody[[1]] 

。也?readHTMLTable描述爲提供

爲它被設計爲一個效用函數的HTML文檔

在提取HTML表格數據有些穩健的方法的功能。它的工作很好,但你可能需要繞過它。

+0

不夠公平,但我希望文檔中提到了這種行爲。 – Frank