3

我正在使用 PHP Domdocument 来加载我的 html。在我的 HTML 中,我有两次 class="smalllist"。但是,我需要加载第一类元素。

现在,我的 PHP 代码是

    $d = new DOMDocument();
    $d->validateOnParse = true;
    @$d->loadHTML($html);
    $xpath = new DOMXPath($d);
    $table = $xpath->query('//ul[@class="smalllist"]');
    foreach ($table as $row) {
       echo $row->getElementsByTagName('a')->item(0)->nodeValue."-";
       echo $row->getElementsByTagName('a')->item(1)->nodeValue."\n";

    }

它加载了两个类。但是,我只需要加载一个具有该名称的类。请帮助我。提前致谢。

4

4 回答 4

0

这是我的最终代码:

        $d = new DOMDocument();
        $d->validateOnParse = true;
        @$d->loadHTML($html);
        $xpath = new DOMXPath($d);
        $table = $xpath->query('//ul[@class="smalllist"]');
        $count = 0;
        foreach($table->item(0)->getElementsByTagName('a') as $anchor){
           $data[$k][$arr1[$count]] = $anchor->nodeValue;
           if( ++$count > 1 ) {
              break;
           }
        }

工作正常。

于 2013-10-08T12:58:54.663 回答
0

DOMXPath返回DOMNodeList具有item()方法的 a。看看这是否有效

$table->item(0)->getElementsByTagName('a')->item(0)->nodeValue

编辑(未经测试):

foreach($table->item(0)->getElementsByTagName('a') as $anchor){
  echo $anchor->nodeValue . "\n";
}
于 2013-10-08T11:40:44.047 回答
0

您可以将 a 放入break循环foreach中以仅从第一类中读取。或者,你可以做foreach ($table->item(0) as $row) {...

代码:

$count = 0;
foreach($table->item(0)->getElementsByTagName('a') as $anchor){
   echo $anchor->nodeValue . "\n";
   if( ++$count > 2 ) {
      break;
   }
}
于 2013-10-08T11:46:14.063 回答
0

另一种方法而不是使用 break (不止一种给猫剥皮的方法):

$anchors = $table->item(0)->getElementsByTagName('a');
for($i = 0; $i < 2; $i++){
  echo $anchor->item($i)->nodeValue . "\n";
}
于 2013-10-08T12:31:20.867 回答