微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

R XML XPath – 具有多个条件的getNodeSet

我是XPath的新手 – 请放轻松我.

无法在目标页面上为不具有大量结构的元素提取XPath.

数据集是新泽西州学校report cards.个人成绩单看起来像this

我已经想出如何提取具有摘要标记的表:

url <- paste("http://education.state.nj.us/rc/rc11/rcreport.PHP?c=",all_sch[i,1],";d=",2],";s=",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

Reading尽可能多地关于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个页面中的位置不同.

任何帮助是极大的赞赏!

解决方法

使用xpath,获取所有表

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

得到这一行

xpathSApply( doc,"//tr/td[contains(.,'SCHOOL:') 
                   and contains(.,xmlValue)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。