Pertanyaan R XML + XPath - getNodeSet dengan beberapa kondisi


Saya baru di XPath - tolong mudahlah pada saya.

Kesulitan mengekstrak XPath pada halaman target saya untuk elemen yang tidak memiliki banyak struktur.

Set data adalah sekolah NJ kartu laporan. Masing-masing kartu laporan terlihat ini

Saya sudah tahu cara mengeluarkan tabel yang memiliki summary menandai:

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

tetapi saya mengalami masalah di mana tidak ada banyak informasi pengenal tambahan untuk dikerjakan.

Misalnya, tabel yang memiliki nama sekolah dan distrik terlihat seperti ini:

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

Strategi saya di sini adalah 'cari node yang merupakan tabel dan miliki teksnya COUNTY

Bacaan sebanyak yang saya bisa tentang XPath, saya mencoba ini:

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

Tapi bukannya mengembalikan node tabel, itu memberi saya boolean TRUE nilai.

Jadi, pertanyaannya adalah: Bagaimana saya bisa menggunakan XPath untuk menemukan tabel yang memiliki teks COUNTY dan SCHOOL?

Saya sudah mencoba banyak strategi lain untuk sedikit berhasil. Salah satu pendekatan yang disarankan oleh orang lain adalah dengan menarik setiap sel data tabel menggunakan sesuatu seperti ini:

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

Tetapi template tidak konsisten untuk data yang hilang - laporan yang tidak lengkap memiliki struktur yang cukup berbeda, dan elemen tidak berada pada posisi yang sama di antara 2.000+ halaman.

Bantuan apa pun sangat dihargai!


4
2017-11-30 00:50


asal


Jawaban:


menggunakan xpath, untuk mendapatkan semua meja

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

Untuk mendapatkan hanya baris

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

5
2017-11-30 02:13