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 というテキストを含むテーブルを見つけるにはどうすればよいかということです。

私は他の多くの戦略を試しましたが、ほとんど役に立ちませんでした。他の人が提案した1つのアプローチは、次のようなものを使用してすべてのテーブルデータセルを単純に引き出すことでした:

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 に答える