为什么simple_html_dom找到('tr')[0]得到表格行2而不是表格行1?

时间:2013-08-29 11:51:08

标签: php simple-html-dom

为什么找到(' tr')[0];获取表格行2而不是表格行1?

这是我的html,所有表都有相同的类和布局。

<table class="tablemenu">
   <tbody>
        <tr>
          <td><b>hello</b></td>
          <td><b>hi</b></td>  
        </tr>
        <tr>
          <td>hey</td>
          <td>Alright</td>
          <td>Good</td>
          <td>Good</td>
          <td><a>Date</a></td>  
        </tr>
   </tbody>
</table>

<table class="tablemenu">
   <tbody>
        <tr>
          <td><b>hello</b></td>
          <td><b>hi</b></td>  
        </tr>
        <tr>
          <td>hey</td>
          <td>Alright</td>
          <td>Good</td>
          <td>Good</td>
          <td><a>Date</a></td>  
        </tr>
   </tbody>
</table>

<table class="tablemenu">
   <tbody>
        <tr>
          <td><b>hello</b></td>
          <td><a>hi</a></td>  
        </tr>
        <tr>
          <td>hey</td>
          <td>Alright</td>
          <td>Good</td>
          <td>Good</td>
          <td><a>LINK</a></td>  
        </tr>
   </tbody>
</table>

这是我的php

<?php

include("simpleHtmlDom/simple_html_dom.php");

$html = new simple_html_dom();

// Load a file 
$html->load_file('http://mySite.net/');

foreach($html->find('table[class=tablemenu]') as $element){

 $Link = $element->find('tr')[0]->find('td')[4]->find('a')[0];        

  echo($Link->text());             
  echo '<br />'; 

}

?>

首先得到“日期”字样。我试过了

$Link = $element->find('tr')[1]->find('td')[4]->find('a')[0]; 

但那不起作用,它说未定义索引。

然后我尝试了这只是乱七八糟的工作

$Link = $element->find('tr')[0]->find('td')[4]->find('a')[0];

由于某种原因,这得到了日期。我不明白为什么,我确实需要这个 虽然它有效 - 我现在无法访问表格第1行来获取单词说&#34; hi&#34;。

2 个答案:

答案 0 :(得分:1)

我看到两个一个问题 s

您的第一个<tr>只有2个<td>,因此$element->find('tr')[0]->find('td')[4]应该抛出异常。

编辑 OP固定粘贴代码。

修复你的标记。您没有正确关闭<tr>元素:

<table class="tablemenu">
   <tbody>
        <tr>
          <td><b>hello</b></td>
          <td><b>hi</b></td>  
        </tr> <!-- close this! --->
        <tr>
          <td>hey</td>
          <td>Alright</td>
          <td>Good</td>
          <td><a>Date</a></td>  
        </tr> <!-- close this! --->
   </tbody>
</table>

<击>

答案 1 :(得分:0)

wrong indexing因为您未正确关闭tr tags

链接应位于第一个索引而不是第零个索引

$Link = $element->find('tr')[1]->find('td')[4]->find('a')[0];   

print hi ,请尝试

echo $element->find('tr')[0]->find('td')[1]->find('b')[0]->text();   

完整代码

foreach($html->find('table[class=tablemenu]') as $element){
   $Link = $element->find('tr')[1]->find('td')[4]->find('a')[0];        
   echo($Link->text());             
   echo '<br />'; 
   echo $element->find('tr')[0]->find('td')[1]->find('b')[0]->text();  
}

如果上述方法不起作用,请在tr中找到tbody

$Link = $element->find('tbody')->find('tr')[1]->find('td')[4]->find('a')[0];

同样对于调试,请尝试此

foreach($html->find('table[class=tablemenu]') as $element){
   echo '<pre>';
   var_dump($element);// find the object here
   echo '</pre>';
}