2013-12-18 4 views
0

Я пытаюсь использовать domDocument и xpath для извлечения содержимого таблицы, включая атрибут href ссылок, которые находятся в некоторых ячейках. Следующий код рисует пробел.php domDocument xpath извлечь ссылки из таблицы

<?php 
$url_content='<html> 
<body> 
<table class="txtable"> 
<tbody> 
    <tr> 
     <th>Col 1</th> 
     <th>Col 2</th> 
     <th>Col 3</th> 
     <th>Col 4</th> 
    </tr> 
    <tr> 
     <td><a href="www.example1.com">link 1</a></td> 
     <td>31</td> 
     <td>34</td> 
     <td>Blue</td> 
    </tr> 
    <tr> 
     <td><a href="www.example2.com">link 2</a></td> 
     <td>41</td> 
     <td>44</td> 
     <td>Red</td> 
    </tr> 
</tbody> 
</table> 
</body> 
</html>'; 

$doc = new DOMDocument(); 
@$doc->loadHTML($url_content); 

$finder = new DomXPath($doc); 
$rows = $finder->query("//table[@class='txtable']/tbody/tr"); 

foreach ($rows->childNodes AS $row){ 
foreach($row->childNodes AS $cell){ 
    if (($cell->nodeName == "td") OR ($cell->nodeName == "th")){ 

     echo $cell->nodeValue."<br>"; 
    } else { 
     echo $cell->getAttribute('href')."<br>"; 
    } 
} 
} 

Я боюсь, что не понимаю что-то основное о xpath или domDocument. Помогите оценить.

Я ожидаю, что для $ rows будет сбор строк, которые можно выполнить с помощью foreach. В отчетах эха должно отображаться содержимое каждого из них.

Если ребенок не «тд» или «е», в этом случае он должен быть «а», то я хочу повторить вне HREF атрибута

Я не подвожу вообще ничего в браузере

Если я бегу от PHP я получаю

PHP Уведомление: Неопределенный собственности: DOMNodeList :: $ ChildNodes в /var/www/follow/php/domtest.php на линии 35 PHP Warning: Invalid аргумент поставляются для Еогеасп () в /var/www/follow/php/domtest.php по строке 35

+0

Пожалуйста, всегда описывают то, что вы хотите достичь, например, путем размещения ожидаемого результата. Также дайте любые предупреждения и/или сообщение об ошибке, которые происходят (и здесь они это делают). –

+0

@Jens Дополнительная информация добавлена. Надеюсь, вы можете указать мне в правильном направлении. – anthonyc

ответ

0

foreach ($rows->childNodes AS $row){

должен быть

foreach ($rows as $row){

+0

Спасибо, Alf. Это сделало трюк – anthonyc

Смежные вопросы