2013-04-20 82 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