Форумы портала PHP.SU » PHP » Программирование на PHP » xpath query

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

1. Соц Сеть - 06 Июня, 2018 - 14:00:13 - перейти к сообщению
Добрый день ! никак не получается вытащить тег <p> из второго запроса , возвращает DOMNodeList Object ( [length] => 0 )
PHP:
скопировать код в буфер обмена
  1. $html="<div class='_5pbx userContent _3576'>
  2.         <div>
  3.                 <p id='pid'>
  4.                         <a href='/link3.php'>links</a>
  5.                 </p>
  6.         </div>
  7.         <div>
  8.                 <p id='pid'>
  9.                         <a href='/link.php'>links</a>
  10.                 </p>
  11.         </div>
  12. </div>";
  13. $doc=new DOMDocument();
  14. $doc->loadHTML($html);
  15.  
  16. $xpath=new DomXPath($doc);
  17. $topics_data=$xpath->query("//*[contains(@class, '_5pbx userContent _3576')]");
  18.  
  19. $p=$xpath->query("*[contains(@id, 'pid')]",$topics_data->item(0));


кто может подсказать в чем проблема ?
заранее спасибо.
2. Vladimir Kheifets - 07 Июня, 2018 - 11:24:42 - перейти к сообщению
Соц Сеть пишет:
Добрый день ! никак не получается вытащить тег <p> из второго запроса , возвращает DOMNodeList Object ( [length] => 0 )
PHP:
скопировать код в буфер обмена
  1. $html="<div class='_5pbx userContent _3576'>
  2.         <div>
  3.                 <p id='pid'>
  4.                         <a href='/link3.php'>links</a>
  5.                 </p>
  6.         </div>
  7.         <div>
  8.                 <p id='pid'>
  9.                         <a href='/link.php'>links</a>
  10.                 </p>
  11.         </div>
  12. </div>";
  13. $doc=new DOMDocument();
  14. $doc->loadHTML($html);
  15.  
  16. $xpath=new DomXPath($doc);
  17. $topics_data=$xpath->query("//*[contains(@class, '_5pbx userContent _3576')]");
  18.  
  19. $p=$xpath->query("*[contains(@id, 'pid')]",$topics_data->item(0));


кто может подсказать в чем проблема ?
заранее спасибо.

Добрый день!
Честно говоря, у меня ещё до этого ругается на то, что одинаковый id в тегах <p>.
Попробуйте использовать simplexml_load_String вместо DomXPath
Вот что получается:
Спойлер (Отобразить)

Обрабратите внивание на libxml_use_internal_errors(true);
Важно перехватывать сообщения об ошибках в структуре данных (особенно из cUrl ) и их обрабатывать, иначе, всё будет вылезать на сайте.
Удачи!
3. Соц Сеть - 23 Июня, 2018 - 20:42:59 - перейти к сообщению
Vladimir Kheifets пишет:
Соц Сеть пишет:
Добрый день ! никак не получается вытащить тег <p> из второго запроса , возвращает DOMNodeList Object ( [length] => 0 )
PHP:
скопировать код в буфер обмена
  1. $html="<div class='_5pbx userContent _3576'>
  2.         <div>
  3.                 <p id='pid'>
  4.                         <a href='/link3.php'>links</a>
  5.                 </p>
  6.         </div>
  7.         <div>
  8.                 <p id='pid'>
  9.                         <a href='/link.php'>links</a>
  10.                 </p>
  11.         </div>
  12. </div>";
  13. $doc=new DOMDocument();
  14. $doc->loadHTML($html);
  15.  
  16. $xpath=new DomXPath($doc);
  17. $topics_data=$xpath->query("//*[contains(@class, '_5pbx userContent _3576')]");
  18.  
  19. $p=$xpath->query("*[contains(@id, 'pid')]",$topics_data->item(0));


кто может подсказать в чем проблема ?
заранее спасибо.

Добрый день!
Честно говоря, у меня ещё до этого ругается на то, что одинаковый id в тегах <p>.
Попробуйте использовать simplexml_load_String вместо DomXPath
Вот что получается:
Спойлер (Отобразить)

Обрабратите внивание на libxml_use_internal_errors(true);
Важно перехватывать сообщения об ошибках в структуре данных (особенно из cUrl ) и их обрабатывать, иначе, всё будет вылезать на сайте.
Удачи!


я решил проблему всего то надо было добавить .// чтобы обратится к этому элементу $p=$xpath->query(".// *[contains(@id, 'pid')]",$topics_data->item(0));

 

Powered by ExBB FM 1.0 RC1