我是 XPath 的新手 - 请放轻松。
在我的目标页面上为没有很多结构的元素提取 XPath 时遇到问题。
数据集是NJ学校report cards .个人成绩单看起来像this
我已经想出如何提取具有 summary
标签的表格:
url <- paste("http://education.state.nj.us/rc/rc11/rcreport.php?c=",
all_sch[i,1],";d=",all_sch[i,2],";s=",all_sch[i,3],sep = '')
doc = htmlParse(url)
admin_salaries = getNodeSet(doc, '//table[@summary="Administrative Salaries and Benefits"]')
但是我遇到了麻烦,因为没有很多额外的识别信息可以处理。
例如,包含学校名称和地区的表如下所示:
<table cellpadding="0" cellspacing="0">
<tr>
<td><strong>SCHOOL:</strong></td>
<td> New Jersey Ave</td>
</tr>
<tr>
<td><strong>COUNTY:</strong></td>
<td> Atlantic</td>
</tr>
<tr>
<td><strong>DISTRICT:</strong></td>
<td> Atlantic City</td>
</tr>
</table>
我的策略是“找到作为表的节点并具有文本COUNTY
Reading尽可能多地了解 XPath,我正在尝试这样做:
names = getNodeSet(doc,'//table and //*[contains(text(),"COUNTY")]')
但是它没有返回表节点,而是给了我一个 bool 值 TRUE
。
因此,问题是:如何使用 XPath 查找包含文本 COUNTY 和 SCHOOL 的表?
我尝试了很多其他策略,但收效甚微。其他人建议的一种方法是使用如下方式简单地提取每个表格数据单元格:
xpathApply( htmlTreeParse(url, useInt=T), "//td", function(x) xmlValue(x))
但模板对于缺失数据并不一致 - 不完整的报告具有截然不同的结构,并且元素在 2,000 多页中的位置也不相同。
非常感谢任何帮助!
最佳答案
使用xpath,获取所有表
xpathSApply( doc, "//table[contains(.,'SCHOOL:')
and contains(.,'COUNTY') ]",xmlValue)
只获取行
xpathSApply( doc, "//tr/td[contains(.,'SCHOOL:')
and contains(.,'COUNTY') ]",xmlValue)
关于xml - R XML + XPath - 具有多个条件的getNodeSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13637420/