2013-04-20 31 views
0

我有从xmlParse()生成的数据。我能够获得对被称为一个XmlNode参考rootR xmlParse()索引

> class(root) 
[1] "XMLInternalElementNode" "XMLInternalNode"  "XMLAbstractNode"  

的时候,我做

> root[[2]][[1]] 
<tr class="party-republican race-winner"><th rowspan="5" class="results-county">Autauga <span class="precincts-reporting">100.0% Reporting</span></th>&#13; 
           &#13; 
           <th scope="row" class="results-candidate">M. Romney</th>&#13; 
           <td class="results-party"><abbr title="Republican">GOP</abbr></td>&#13; 
           <td class="results-percentage">72.6%</td>&#13; 
           <td class="results-popular"> 17,366</td>&#13; 
          </tr> 

我尝试引用在侧价值标签:

<td class="results-percentage"> 

但是这样做root[[1]][[2]][["<td class='results-percentage'>]]返回null

我在做什么错误,阻止我从交流聆听72.6%的价值?

回答

1

你应该给一个有效xpath,事情是这样的:

//td[@class='results-percentage'] ## preeceeding by td and cotaining a certain class 

使用您的数据:

library(XML) 
dd <- xmlParse('<tr class="party-republican race-winner"><th rowspan="5" class="results-county">Autauga <span class="precincts-reporting">100.0% Reporting</span></th>&#13; 
    &#13; 
    <th scope="row" class="results-candidate">M. Romney</th>&#13; 
    <td class="results-party"><abbr title="Republican">GOP</abbr></td>&#13; 
    <td class="results-percentage">72.6%</td>&#13; 
    <td class="results-popular"> 17,366</td>&#13; 
    </tr> ',asText=TRUE) 

然后应用的XPath

getNodeSet(dd, "//td[@class='results-percentage']/text()")[[1]] 
72.6% 

或者使用xpathSApply

xpathSApply(dd, "//td[@class='results-percentage']",xmlValue) 
[1] "72.6%" 
+0

谢谢你,正是我一直在寻找的。 “/ text()”是做什么的?我明白没有它你会得到标签和价值,但为什么/ text()去掉标签? – user1431282 2013-04-20 08:08:20

+0

好的,我相信我知道它做了什么。这是一个“将任何文本值匹配到更深一级”的术语吗? – user1431282 2013-04-20 08:12:40

+1

@ user1431282是的。这将选择路径下的所有文本节点..... – agstudy 2013-04-20 08:14:39