4

我是 XPath 的新手——请放轻松。

在我的目标页面上为没有很多结构的元素提取 XPath 时遇到问题。

数据集是 NJ 学校成绩单。个人成绩单如下所示

我已经想出了如何拉出带有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>&nbsp;New Jersey Ave</td>
          </tr>
          <tr>
            <td><strong>COUNTY:</strong></td>
            <td>&nbsp;Atlantic</td>
          </tr>
          <tr>
            <td><strong>DISTRICT:</strong></td>
            <td>&nbsp;Atlantic City</td>
          </tr>
        </table>

我的策略是“找到表格节点并包含文本COUNTY

尽可能多地阅读有关 XPath 的内容,我正在尝试这个:

names = getNodeSet(doc,'//table and //*[contains(text(),"COUNTY")]')

但是它没有返回表节点,而是给了我一个布尔TRUE值。

所以,问题是:如何使用 XPath 查找具有文本 COUNTY 和 SCHOOL 的表?

我尝试了很多其他策略,但收效甚微。其他人建议的一种方法是简单地使用以下方法提取每个表格数据单元格:

xpathApply( htmlTreeParse(url, useInt=T), "//td", function(x) xmlValue(x))

但模板对于缺失数据并不一致 - 不完整的报告具有完全不同的结构,并且元素在 2,000 多个页面中的位置不同。

任何帮助是极大的赞赏!

4

1 回答 1

5

使用 xpath,获取所有表

xpathSApply( doc, "//table[contains(.,'SCHOOL:') 
                  and contains(.,'COUNTY') ]",xmlValue)

只得到行

xpathSApply( doc, "//tr/td[contains(.,'SCHOOL:') 
                   and contains(.,'COUNTY') ]",xmlValue)
于 2012-11-30T02:13:55.623 回答