2012-11-30 1 views
4

XPath를 처음 사용합니다.R XML + XPath - 여러 조건이있는 getNodeSet

문제 구조의 여지가없는 요소 내 목표 페이지에 XPath를 추출하는 데.

데이터 세트

뉴저지 학교 report cards입니다. 작업 추가 식별 많은 정보가없는 경우

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"]') 

하지만 문제가 있어요 : 개별 성적표 내가 summary 태그가 테이블을 당겨하는 방법을 알아 냈어요 this

처럼 떨어져. 예를 들어

, 학교 이름과 지역이있는 테이블은 다음과 같습니다

 <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> 

내 전략은 여기에 테이블이며, I 등의 COUNTY

Reading만큼 텍스트가 노드를 찾아 '이었다

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

을하지만 그 대신 테이블 노드를 다시 반환, 그것은 나에게 부울을 제공합니다 : XPath에 대해, 나는 이것을 시도하고 있습니다값.

그래서, 질문은 : 가 어떻게 텍스트 COUNTY 학교가 테이블을 찾기 위해 XPath를 사용할 수 있습니까?

나는 거의 소용이 다른 전략을 많이 시도했습니다. 다른 사람에 의해 제안 한 가지 방법은 다음과 같이 사용하여 모든 테이블 데이터 셀을 꺼내 간단했다 :

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

을하지만 템플릿은 데이터 누락 일치하지 않습니다 - 불완전한 보고서는 매우 다른 구조를 가지고 있고, 요소에없는 2,000 개 이상의 페이지에서 같은 위치.

도움을 주시면 대단히 감사하겠습니다. XPath를 사용하여

답변

5

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

완벽 단지 행을

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

작품을 얻으려면 모든 테이블을 얻을 수 있습니다. 감사! – Andrew