2012-04-28 25 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是静态字符串。