2012-04-28 58 views
1

我使用以下腳本嘗試從HTML轉換而來的PDF文件中提取數據。當在XML中使用XML抓取數據時提取「風格」信息R

temp.html <- scan(file=filename,what="character") 
pagetree <- htmlTreeParse(temp.html, error=function(...){}, useInternalNodes = TRUE) 
tx.raw <- getNodeSet(pagetree,"//div") 

tx.raw創建一個列表,其中一個如下圖所示:

tx[[170]] 

[[170]] 
<div style="position:absolute;top:985;left:748"> 
    <nobr> 
    <span class="ft03"> 




971.72 
</span> 
    </nobr> 
</div> 

我需要的信息在裏面span(即971.72),但我還需要stylediv讓我知道span中的數據片段是位於pdf文件中的。我怎樣才能提取樣式信息呢?謝謝。

回答

0

我會做一個簡單的正則表達式

sub('.*style="([0-9a-z;:]*)".*', '\\1', t) 

t持有相應的HTML部分爲文本。根據您的演示HTML部分


冗長的例子:

## loading your demo HTML part to one line 
t <- paste(readLines(textConnection('<div style="position:absolute;top:985;left:748"> 
    <nobr> 
    <span class="ft03"> 




971.72 
</span> 
    </nobr> 
</div>')), collapse = '') 

## let us extract some parts! 
library(XML) 
t.html <- htmlTreeParse(t, useInternalNodes = TRUE) 
t.val <- xpathApply(t.html, '//div', xmlValue) 
t.val <- gsub('\\s', '', t.val) 
t.style <- sub('.*style="([0-9a-z;:]*)".*', '\\1', t) 

根據您之前解析HTML,最上面的線可以消除 - 當然。

結果:

> t.val 
[1] "971.72" 
> t.style 
[1] "position:absolute;top:985;left:748" 

提取topleft也同樣可以解決的,我只是不處理它,因爲我不知道,如果如lefttop是靜態字符串。