2013-09-30 34 views
2

道歉,我相信这是简单,但我想不出我做错了什么..

除了其他事情

,该代码..

study.name <- 'NLSY79' 
library(XML) 
library(httr) 
sub.study <- paste0("https://www.nlsinfo.org/investigator/servlet1?get=SUBSTUDIES&study=" , study.name) 
study.html <- GET(sub.study) 
content(study.html) 
study.block <- htmlParse(study.html , asText = TRUE) 

..gives我..

$children$html 
<html> 
<body> 
    <p> 
    false 
    <select id="thesubstudies" onchange="onSubstudyChanged(this);"> 
    <option value="-1" selected="selected">(Choose One)</option> 
    <option value="343.06">NLSY79 (1979-2010)</option> 
    </select> 
    </p> 
</body> 
</html> 

我只是想快速(自动)的方式来提取 “343.06”

谢谢!

回答

3

您可以使用xpathSApply提取元素,你想

xpathSApply(study.block, "//option") 
# [[1]] 
# <option value="-1" selected="selected">(Choose One)</option> 
# [[2]] 
# <option value="343.06">NLSY79 (1979-2010)</option> 

和他们(xmlValuexmlAttrs,根据上下文)应用功能。

xpathSApply(study.block, "//option", function(u) xmlAttrs(u)["value"]) 
# value value 
# "-1" "343.06" 
+0

完美!谢谢 :) –

1

您还可以使用xmlGetAtrr

xpathSApply(study.block, "//option", xmlGetAttr, "value") 
[1] "-1"  "343.06" 

xpathSApply(study.block, "//option[not(@selected)]", xmlGetAttr, "value") 
[1] "343.06"