Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: работа DomDocument
Форумы портала PHP.SU » » Вопросы новичков » работа DomDocument

Страниц (1): [1]
 

1. t0xas - 07 Октября, 2011 - 14:23:07 - перейти к сообщению
Добро времени всем, пишу парсер html, из-за здорового цикла сервак начинает выкидывать с криком недостатка памяти. Пришлось переделывать алгоритм. И так что мне нужно.
Существует функция, которая находит ссылку, от этой ссылке мне нужно искать родительские тэги, как это сделать, не могу разобраться. Вот моя недофункция.

PHP:
скопировать код в буфер обмена
  1.  
  2. function findParentTags($url, $linka) {
  3.                 echo "\n=====findParentTags======\n";
  4.                 echo $url;
  5.                 echo "\n";
  6.                 echo $linka;
  7.        
  8.                 $dom = new DomDocument();
  9.                 $dom->loadHTMLFile($url);
  10.                 $link = $dom->getElementsByTagName("a");
  11.                 echo "\n========gogogo=========\n";
  12.                
  13.                 $number=0;
  14.                 $flag = FALSE;
  15.                 while($link->item($number)->textContent != NULL) {
  16.                         if(stristr($element = $link->item($number)->getAttribute('href'), $linka)){
  17.                                 $flag = TRUE;
  18.                                 break;
  19.                         }
  20.                         $number++;
  21.                 }
  22.                
  23.                
  24.                 if($flag)
  25.                         echo $element = $link->item($number)->getAttribute('href');
  26.                 else
  27.                         echo "\nNot finded link\n";
  28.                 echo "\n==============end =========\n";
  29.          /*а вот тут надо найти родительские тэги*/
  30.                 sleep(5);
  31.                
  32.                
  33.         }
  34.  
2. caballero - 07 Октября, 2011 - 14:57:07 - перейти к сообщению
а разве элемента DOM нет свойства parent?
Если нет то надо xpath использовать
а еще лкчше не страдать фигней и взять готовые html парсеры типа phpquery или querypath
там и xpath есть и главное селекторы аналогичные селекторам jQwery
3. t0xas - 07 Октября, 2011 - 15:00:39 - перейти к сообщению
caballero пишет:
а разве элемента DOM нет свойства parent?
Если нет то надо xpath использовать
а еще лкчше не страдать фигней и взять готовые html парсеры типа phpquery или querypath
там и xpath есть и главное селекторы аналогичные селекторам jQwery



Я пробовал два разных парсера, simple и phpQuery, у меня вылетала ошибка сегментации, докопался до админа. он сказал чтобы я память смотрел. Иногда бывает память переполняет

Продолжаю страдать фигней к сожалению.

Я уже начал копать XPath

PHP:
скопировать код в буфер обмена
  1.  
  2.         $dom = new DomDocument();
  3.                 $dom->loadHTMLFile($url);
  4.                 $xpath = new DOMXpath($dom);
  5.                 $elements = $xpath->query("//*[@container]");
  6.                
  7.                 if (!is_null($elements)) {
  8.                           foreach ($elements as $element) {
  9.                                 echo "<br/>[". $element->nodeName. "]";
  10.  
  11.                                 $nodes = $element->childNodes;
  12.                                 foreach ($nodes as $node) {
  13.                                   echo $node->nodeValue. "\n";
  14.                                 }
  15.                         }
  16.                 }
  17.  


И он не одного элемента не нашел с этим айдишником, а он точно есть. Подсмотрел пример на php.net

Покажите пожалуйста правильный пример как заюзать XPath/
(Добавление)
Тупёж к добру не приводит. ) разобрался с этим.

 

Powered by ExBB FM 1.0 RC1