2013-07-18 4 views
0

Я получаю тр таблиц и затем в цикле я хочу получить текст всех полей TD, смотрите здесь:Получить текст TD Xpath PHP

<? 
    $lines = $xpath->query("//table[@id='cab_table'] //tr"); 
     var_dump($lines);// Give me object(DOMNodeList)#11 (1) { ["length"]=> int(6) } 


      for($i = 0; $i < count($lines); $i++) { 
       if($i != 0){ 
        $tds = $xpath->query('//td', $lines[$i]); 
        $result[$i - 1]['number'] = trim($tds->item(0)->nodeValue); 
        $result[$i - 1]['volume'] = trim($tds->item(1)->nodeValue); 
        $result[$i - 1]['sum'] = trim($tds->item(2)->nodeValue); 
       } 
      } 

      var_dump($result); //Give me NULL 
      die(); 

>

Почему я получаю NULL?

Теперь у меня есть:

$lines = $xpath->query("//table[@id='cab_table'] //tr"); 


      foreach($lines as $line) { 
      $tds = $xpath->query('//td', $line); 
      $count = $tds->length; 

       for($i=0; $i<$count; $i++){ 

        echo $tds->item($i)->nodeValue.'<br>'; 
        //echo $i.'<br>'; 


       } 

      } 

Но я хочу сделать следующий для каждого тр в цикле $result[0] = td[0]; $result[1] = td[1]; $result[2] = td[2]; Вы можете мне посоветовать?

+0

Не обязательно, но это может помочь, если вы разместите HTML или ссылку на него. –

+0

Возможно, вам потребуется: http://php.net/iterator_to_array – hakre

ответ

0
foreach($lines as $line) { 

        for($j=0; $j<=3; $j++) { 

        $tds_{$j} = $xpath->query('//td['.$j.']', $line); 
        $tds_{$j} = $xpath->query('//td['.$j.']', $line); 
        $tds_{$j} = $xpath->query('//td['.$j.']', $line); 

        $count = $tds_{$j}->length; 


         for($i=0; $i<$count; $i++){ 

          $this->result['number'][] = $tds_{$j}->item($i)->nodeValue; 
          $this->result['volume'][] = $tds_{$j}->item($i)->nodeValue; 
          $this->result['code'][] = $tds_{$j}->item($i)->nodeValue; 
          $this->result['start_date'][] = $startDate; 
          $this->result['end_date'][] = $endDate; 

         } 

        } 

       } 
+0

Где ты? Пожалуйста, вы можете увидеть мой пример, он работает неправильно, мне не нужны данные td [0] td [1] td [2] – Oleg

1

->query() возвращает объект DOMNodeList. Это может быть count() ed и foreach() ed, но вы не можете использовать его как массив, какой вы есть.

$tds = $xpath->query('//td', $lines[$i]); 
          ^^^^^^^^^^---incorrect 

Попробуйте

$lines = $xpath->query("//table[@id='cab_table'] //tr"); 
foreach($lines as $line) { 
    $tds = $xpath->query('//td', $line); 
    ... 
} 

вместо этого.

+0

Спасибо, бу, если я хочу получить td [0], td [1]. TD [2]? Мне нужен цикл использования в цикле и foreach ($ tds as $ val) {echo $ val-> item (0) -> nodeValue;} ??? – Oleg

+0

yep. Домой может быть боль для этого. вам может потребоваться рассмотреть simplexml, что упростит этот вид доступа. это будет больше похоже на '$ dom-> table-> tr [0] -> td [1]' и еще что. –

+0

Пробовал такое: foreach ($ lines as $ line) { \t \t \t \t $ tds = $ xpath-> query ('// td', $ line); \t \t \t \t \t \t \t \t \t \t для ($ I = 0; $ г <подсчет ($ ТДС); $ я ++) { \t \t \t \t \t \t эхо $ tds-> элемент ($ я) - > nodeValue.
'; \t \t \t \t \t} \t \t \t \t \t \t \t \t \t \t \t \t} – Oleg