2016-03-30 1 views
0

это HTML часть я хочу разобрать, чтобы получить текст внутри <p>:Как разобрать содержимое тэга p без класса и без идентификатора, используя синтаксический анализатор SimpleHTMLdom?

<div class="container"> 
    <h2>title</h2> 
    <div class="divIdontNeed"> hi </div> 
    <p> I WANT THIS TEXT </p> <====== this is what i want 
    <p> i don't want this one </p> 
</div> 

Что я сделал это петля (потому что над HTML на нескольких страницах, и я хочу, чтобы все из них на массив $allTexts):

foreach($html->find('div[class=container]')->find('p',0) as $text){ 

        array_push($allTexts, $text->plaintext); 
       } 

Когда я сделать это, я получил сообщение об ошибке говорящее Fatal error: Call to a member function find() on array in /path/to/MyTextParser.php

Спасибо всем

+0

У вас есть несколько div с классом «контейнер»? –

+0

То, что я имею в виду под «несколькими», это: веб-сайт, в котором я разбираюсь, содержит разбиение на страницы, все страницы содержат эту же часть html (с различным содержимым, но с той же структурой). – Sushi

ответ

2

Вы получаете ошибку, потому что первый find() возвращает массив элементов, а не один.

Вам нужно сделать цикл по результатам этого первого find():

foreach($html->find('div[class=container]') as $element) 
{ 
    foreach ($element->find('p',0) as $text){ 
    array_push($allTexts, $text->plaintext); 
    } 
} 
+0

Awesome thank you man – Sushi

+0

Не претендовать на то, просто добавьте 'foreach 'в 3-й строке мой друг;) спасибо – Sushi

+0

@ Суши исправлено, спасибо! –

0

вы должны выбрать п-й элемент, который вы хотите.

$divObj=$html->find('div.container', 0); 

echo $divObj->find('p', 0)->plaintext; //you are choosing only first p tag 

echo $divObj->find('p', 1)->plaintext; //you are choosing only second p tag 

В случае, если вам нужен текст из всех р элементов DIV, что вам нужно сделать Foreach

ИЛИ

вы можете выбрать его как следующий родственный из div с классом divIdontNeed

$divObj=$html->find('div.divIdontNeed', 0)->next_sibling(); 

echo $divObj->plaintext; 
Смежные вопросы