0

私は次のようにスクレイプしようとしているテーブルを持っています:

<table id="thisTable">
    <tr>
        <td class="value1"></td>
        <td class="value2"></td>
        <td class="value3"></td>
        <td class="value4"></td>
    </tr>
    <tr>
        <td class="value5"></td>
        <td class="value6"></td>
    </tr>
</table>

そして、このように見える私のDOMXPath(これまでのところ):

$htmlDoc = new DomDocument();
@$htmlDoc->loadhtml($html);
$xpath = new DOMXPath($htmlDoc);

$nodelist = $xpath->query('//*[@id="thisTable"]');

foreach ($nodelist as $n){
    echo $n->nodeValue."\n";
}

これは機能し、テーブルの値を取得しますが、nodeValueのクラスを指定するにはどうすればよいですか?最終的に、私の目標は、tdのコンテンツからvalue2value4およびvalue5単一の行に新しいテーブルを作成することです。

4

3 に答える 3

1
$htmlDoc = new DomDocument();
$htmlDoc->loadHTML($html);
$xpath = new DOMXPath($htmlDoc);

$nodelist = $xpath->query('//td');

foreach ($nodelist as $n){
    echo $n->getAttribute("class")."\n";
}

:クラスの値を取得するには、 getAttributeプロパティを使用します

于 2013-03-03T14:55:25.037 に答える
0

xpath-queryを展開します。

$class="value1";
$nodelist = $xpath->query('//*[@id="thisTable"][@class="$class"]');
于 2013-03-03T14:50:49.787 に答える
0

私が正しく理解しているかどうかはわかりませんが、value2、value4、value5のテキストコンテンツを1行にしたい場合は、次のxpathを使用できます。

(//td[@class='value2'] | //td[@class='value4'] | //td[@class='value5'])/text()

例えば:

<table id="thisTable"> 
  <tr> 
    <td class="value1">  1111</td>
    <td class="value2"> 222 </td>
    <td class="value3">333 </td> 
    <td class="value4"> 444</td>
  </tr>  
  <tr> 
    <td class="value5">  555</td>
    <td class="value6"> 666</td>
  </tr> 
</table>

出力は次のようになります:222 444 555

于 2013-04-17T03:49:23.717 に答える